DayZ server, basic setup knowledge and more - GarageMan/Setting-up-a-DayZ-server GitHub Wiki
There is mainly nothing to do to setup a Chernarus Plus server.
Nitrado, for example, provides all files needed preinstalled, and Nitrado keeps these up to date (which may trouble you, because some files might be overwritten when Bohemia Interactive (BI) launches updates for DayZ. (I ran in a lot of trouble with the 1.15 update - all my files have been overwritten :-()
dayzstandalone/
addons
appcache
battleye
bliss
config or profiles
docs
dta
keys
logs
mpmissions/
dayzOffline.chernarusplus/
db/
env/
dayzOffline.enoch/
db/
env/
steamapps
That folder holds all bikeys needed to verify workshops to be loaded. Missing or old/wrong keys will lead to the workshop will not be loaded by the server.
A lot of workshops have additional config files (xml or json), which will be stored in that folder, or in specific, workshops- or designer-related subfolders. Some workshop designers are not very good in setting up their c-files, so that you sometimes will find something like /config/config/ - that is, because the designer has configured a wrong path in his/here c-file ;-) That is no issue, but makes the folder structure a bit illegible.
The designer of a workshop describes the structure of the specifig xml or json file, mostly on their workshop page on Steam, or in a readme-file.
You will find additional log files in that folder, because the folder config is by default the folder for standard log files, such as the ADM
files, the RPT
files (start to shutdown), and the server.log (a sequential filled file - check the growing length of it over the time).
The folder ´mpmissions´ holds all the so called mission file folders, for each map a specific folder. Preinstalled are /dayzOffline.chernarusplus and /dayzOffline.enoch.
Each of these mission folders is holding the following initial folders:
Details about the containing files below per mission/map.
Details about the containing files below per mission/map.
After the first start the folder /storage_1 will be created, which holds the game/status files (what is where, etc.). That is the folder to be deleted for a server wipe!
That files holds the basic configuration values. Nothing to talk about, nothing to change in that file.
<config version="1.0">
<video noshadergen="1" screenwidth="1520" screenheight="892" posX="355" posY="97" ratio3D="1" vsync="0" fullscreen="0" gamma="0" contrast="0" brightness="0" texturefilter="2" maxaniso="16" texturedetail="0" modeldetail="0" shadow="3" shadowcascades="4" omnishadow="0" llevel="2" windowmode="1" fsaa="8" atoc="15" rvterrainshaders="3" stabilizecascades="1" />
<render geometricdetail="2" postprocess="5" reflections="0" waterdetail="1" terraindetail="1" terrainsalpha="1" />
<controls>
<mousespeed horizontal="100" vertical="100" />
</controls>
<workbench>
<launchbar>
<executable path="DayZIntDX11.exe" parameters="-noPause -window -x=1280 -y=720" icon="Icons/myIcon.png" tooltip="Launch game" />
<executable path="DataExporterApp_d.exe" parameters="" icon="" tooltip="Launch data exporter" />
</launchbar>
</workbench>
<jobsystem globalqueue="4096" threadqueue="1024">
<pc maxcores="2" reservedcores="1" />
<ps4 threadcount="4" />
<xb1 threadcount="4" />
</jobsystem>
</config>
That file has to be adapted for your specific DayZ server. Most of the data will be added/changed by the server provider (Nitrado).
You will find much more information on https://community.bistudio.com/wiki/DayZ:Server_Configuration#Server_Configurations - I will only give you an overview, and lead you to the most important parameters to be configured by you.
hostname = "EXAMPLE NAME"; // Your server's name
password = ""; // Password to connect to the server
passwordAdmin = ""; // Password to become a server admin
enableWhitelist = 0; // Enable/disable whitelist (value 0-1)
maxPlayers = 60; // Maximum amount of players - mostly preset by the hoster
verifySignatures = 2;
forceSameBuild = 1;
disableVoN = 0; // Enable/disable voice over network (value 0-1) - mostly preset by the hoster
vonCodecQuality = 20; // Voice over network codec quality, the higher the better (values 0-30) - preset by the hoster
disable3rdPerson = 0; // Toggles the 3rd person view for players (value 0-1)
disableCrosshair = 0; // Toggles the cross-hair (value 0-1)
serverTime = "SystemTime"; // Initial in-game time of the server.
// "SystemTime" means the local time of the machine.
// Another possibility is to set the time to some value in "YYYY/MM/DD/HH/MM" format,
// e.g "2015/4/8/17/23".
serverTimeAcceleration = 1; // Accelerated Time - The numerical value being a multiplier (0.1-64).
// Thus, in case it is set to 24, time would move 24 times faster than normal.
// An entire day would pass in one hour.
serverNightTimeAcceleration = 1; // Accelerated Nigh Time - The numerical value being a multiplier (0.1-64)
// and also multiplied by serverTimeAcceleration value.
// Thus, in case it is set to 4 and serverTimeAcceleration is set to 2,
// night time would move 8 times faster than normal.
// An entire night would pass in 3 hours.
serverTimePersistent = 0; // Persistent Time (value 0-1)// The actual server time is saved to storage,
//so when active, the next server start will use the saved time value.
guaranteedUpdates = 1;
loginQueueConcurrentPlayers = 5; // The number of players concurrently processed during the login process.
// Should prevent massive performance drop during connection when a lot of people
// are connecting at the same time.
loginQueueMaxPlayers = 500; // The maximum number of players that can wait in login queue
instanceId = 1; // mostly preset by the hoster
storageAutoFix = 1; // mostly preset by the hoster(value 0-1)
class Missions
{
class DayZ
{
template = "dayzOffline.chernarusplus"; // Your mission files are located under ... That folder name has to be accurate!
};
};
The root of the mission folder (e.g. /dayzOffline.chernarusplus) allways holds the same files and folders:
Read on https://community.bistudio.com/wiki/DayZ:Central_Economy_setup_for_custom_terrains for more detailed information. I will describe some of the files in that guide - check the table of contents below.
There is a difference between client side mods, and server side mods. Some workshops only needs to be installed on and loaded by the server - not the client! Watch on Youtube.
One example is the workshop 'Survivor Missions'.
Allways check your xml files after making changes. Allways!!
The webpage DayZ Server Customizer , which is very good in my opinion, deals, among other things, with XML in relation to DayZ XML files.
A great Facebook group dedicated to XML on DayZ: DayZ Free XML Support Group
To validate changed XML files, always use the following page, for example: Validate XL files or https://jsonformatter.org/xml-formatter.
To validate changed JSON files, always use the following page, for example: JSON Formatter & Validator.
Remember: JSON does not provide any comments (like //).
That is, obviously, a client issue, which can be solved in two ways:
- Press ALT-RETURN when in windowed mode.
- Change the settings in the client menu.
From my perspective the best way to solve that issue is changing the settings in the file DayZ.cfg located in folder Documents/DayZ
:
language="English";
adapter=-1;
3D_Performance=31915;
Resolution_Bpp=32;
WinX=0;
WinY=0;
WindowWidth=2560; <= Screen size width
WindowHeight=1440; <= Screen size height
Windowed=0; <= That should trigger the client to start in full screen.
MSAA=8;
PostFX=2;
VSync=1;
FXAO=4;
AToC=0;
AnisoFilter=2;
TerrainDetail=3;
FXAA=4;
When ever you read a message like the following in the RPT or server.log file, you have to do the following:
-
Check the config.cpp in the pbo for the class name mentioned. Potentially, the name is written incorrect, or it does not exist!
-
Remove the item from the specific types.xml file
-
If the item exists in the config.cpp, and it is written corretly, then you may have to change the order for loading the types.xml files in the cfgeconomycore.xml file.
20:33:12 !!! Type 'BNGP_SnowCamo_Multicam_GhillieSuit' will be ignored. (Type does not exist. (Typo?))
Root cause: Obviously, the category vehiclesparts
in the files types.xml and mapgroupproto.xml are written differently, which is, of cause, wrong.
Solution: Exchange each and any vehicleparts
with vehiclesparts
in the file mapgroupproto.xml (38 pcs as of Jaunary 23, 2022)
Root cause: The time to Life in the file types.xml is too low. Set the value to 3,888,000, and the car will life (allmost) for ever (45 days). ;-)
<type name="OffroadHatchback">
<nominal>0</nominal>
<lifetime>3</lifetime> <!-- change that value to 3888000 -->
<restock>1800</restock>
<min>0</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"/>
</type>
That happens because the lifetime settings for these objects in the hardcore version of Namalsk are set to a few seconds only - base building is not in focus of the hardcore version!
Mitigate that by rising the value of the lifetime to something like 3,888,000 seconds, so the object will last "forever" (or, more specific, 45 days).
...
<type name="Fence">
<lifetime>3888000</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0" />
</type>
<type name="TerritoryFlag">
<lifetime>3888000</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0" />
</type>
...
<type name="Watchtower">
<lifetime>3888000</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0" />
</type>
...
Remember, that you may have to add nails, hammer, etc. to the hardcore's types.xml (just copy/paste from the regulare version, or from Chernarus).
General server settings in serverDZ.cfg and globals.xml (see below)
This article deals with the configuration file which is used to configure various game server settings: BI Studio, Server Configuration
Change the name of your server in the file serverDZ.cfg:
hostname = "nitrado.net Gameserver - Dovecote @ Namalsk (hardcore)“;
The admin password in the file serverDZ.cfg is in clean text!
passwordAdmin = "mY6a55w0r6;-)";
In addition to Chernarus and Livonia/Enoch, there are Deer Isle, Namalsk, etc.
The corresponding folders must exist on the server (default: Chernarus and Livonia/Enoch; others must be downloaded from the Internet).
The setting is made in the file serverDZ.cfg (or with Nitrado via the GUI under "Configuration files").
...
class Missions
{
class DayZ {
template="dayzOffline.enoch";
// Vanilla mission: dayzOffline.chernarusplus
// DLC mission: dayzOffline.enoch
};
};
...
serverTimeAcceleration = 1; // Accelerated Time - The numerical value being a multiplier (0.1-64).
// Thus, in case it is set to 24, time would move 24 times faster than normal.
// An entire day would pass in one hour.
serverNightTimeAcceleration = 1; // Accelerated Nigh Time - The numerical value being a multiplier (0.1-64)
// and multiplied by serverTimeAcceleration value.
// Thus, in case it is set to 4 and serverTimeAcceleration is set to 2,
// nighttime would move 8 times faster than normal.
// An entire night would pass in 3 hours.
Check my article about the calculation of these two parameters. https://github.com/GarageMan/DayZ-Server-Time-Acceleration
If the night should run faster than the daylight time, so increase the parameter serverNightTimeAcceleration
from 1 up.
As an example, the parameters for a split of 1:1 (2 hours day, 2 hours night - this is almost too low a ratio in winter):
serverTimeAcceleration = 6;
serverNightTimeAcceleration = 1;
The times for login and logoff can be set in the globals.xml file (default: 15 seconds, set to 5 seconds in this example):
...
<var name="TimeLogin" type="0" value="5"/>
<var name="TimeLogout" type="0" value="5"/>
...
lightingConfig=
1: vanilla pitch black night, 2: vanilla bright night
A quick and dirty description on Youtube/Scalespeeder.
Using that file make some server configurations much easier.
The file cfggameplay.json can be located in the mission-folder below mpmissions
To activate the usage of cfggameplay.json you have to set enableCfgGameplayFile = 1
in serverDZ.cfg.
The values for stamina, weather and so on can be defined here. Above all, however, JSON files can be integrated here, via which objects are spawned. That is a much better method for object spawning then the init.c method (refer to my Github for more information).
If using cfggameplay.json for object spawning, so my recommentation is to use a separat folder for these object files, like custom_json
.
Example from BI Studio:
```json { "Objects": [ { "name": "Land_Wall_Gate_FenR", "pos": [ 8406.501953125, 107.73682403564453, 12782.3388671875 ], "ypr": [ 0.0, 0.0, 0.0 ] }, { "name": "Land_Wall_Gate_FenR", "pos": [ 8422.501953125, 107.73682403564453, 12782.3388671875 ], "ypr": [ 0.0, 0.0, 0.0 ] } ] } ```
I use this for the builder items and objects that I use to design the Trader Zone and the Black Market. These objects could also be built in via TraderObject.txt, but this is then a function of the Mod Trader. If this mod is not used, you would have to look for another solution (e.g. init.c) anyway. I find this new function via cfggameplay.json to be the most convenient – because you can decide which json files you would like to actually integrate and you can also omit one or the other json file for various occasions (also for test purposes).
You can adjust the temperatures on your server per month (min/max) in the cfggameplay.json, to.
"WorldsData":
{
"lightingConfig": 222,
"objectSpawnersArr": ["custom_spawn/Medical_Tents.json"],
"environmentMinTemps": [-32, -27, -21, -14, -7, -4, -2, 2, -3, -7, -15, -25],
"environmentMaxTemps": [-12, -8, -3, 0, 2, 5, 7, 11, 8, 5, 2, -8]
},
<type name="name_of_item_as_of_the_pbo">
<nominal>number</nominal> : How many items of that classname will spawn in MAXIMUM at any given time (laying around)
<lifetime>time_in_sec</lifetime> : Time to despawn if dropped
<restock>time_in_sec</restock> : Time to respawn an item after it has been picked up from a spawn point
<min>number</min> : Minimum amount of that item to be on the map in any given time BEFOR respawning starts!
<quantmin>number</quantmin> : The minimum quantity of a consumable within the item. Values: -1.0=empty, up to +100.0%=full.
<quantmax>number</quantmax> : The maximum quantity of a consumable within the item. Values: -1.0=empty, up to +100.0%=full.
- Used with weeapons: quantmin=30, quantmax=80 - the chance the gun will spawn in with a bullet loaded!
<cost>number</cost> : Priority to spawn in, importance of item to spawn in; Sets the spawn chance of an item, where 100 means an item will spawn in 100% of the time.
<flags
count_in_cargo="boolean" : counts items in cargo = exists in a car => will be counted and spawned in if less than min
count_in_hoarder="boolean" : counts items in hoarder = tents?
count_in_map="boolean" : counts items in map = somewhere on the map - allways 1 (true)
count_in_player="boolean" : counts items in player = in player's hands
crafted="boolean" : counts items in crafted = item must have been crafted, does not spawn in,
nominal/min are allways zero!!!
deloot="boolean" : counts items in deloot = dynamic event loot, like the FAMAS spawning in by dynamic events
- can be combined with nominal and min other than 0!
</flags>
<category name="kind_of_the_item" /> : like weapons, food, clothes, etc.
<usage name="Area_usage_of_the_item" /> : like Police, Industrial, Farms, Town, etc. - more than one "usage" line is possible!
<tag name="A_tag_for_the_item" /> : like floor, shelves, etc.
<value name="Tier_level" /> : The tier level - more than one "value" line is possible
<damage min="0.01" max="0.35" />
...
<cargo preset="ammomilitary" />
<attachments chance="1.00"> : 100% chance to spawn with one or the other attachments
<item name="attachment_01" chance="0.20" /> : 20% chance this item will be the chosen
<item name="attachment_01" chance="0.20" /> : 20% chance this item will be the chosen
</attachments>
If both items should be possible to be attached, not only one of them, so separate them:
<attachments chance="0.20"> : 20% chance one of the items will spawn
<item name="attachment_01" chance=1.00" /> : 100% chance this item will be the chosen
</attachments>
<attachments chance="0.20"> : 20% chance one of the items will spawn
<item name="attachment_02" chance="1.00" /> : 100% chance this item will be the chosen
</attachments>
Use <damage min="0.0" max="0.1" />
for pristine loot.
condition | health |
---|---|
prestine | 71 - 100 |
worn | 41 - 70 |
damaged | 21 - 40 |
badly damaged | 1 - 20 |
ruined | 0 |
That can be activeted/deactivated (recommended) in the file serverDZ.cfg:
lightingConfig = 1; // 0 for bright, 1 for dark;
Yes, use value 222 for dark and 223 for bright in your server config
If using the cfggameplay.json, you have to activate/deactivate the lighting in that file:
disablePersonalLight = 1; // to get rid of the self-glow
If using the cfggameplay.json, you have to activate/deactivate personal light in that file:
The view or draw distance is configured in the (local) client, and on the server side. Which ever is the least one, „wins“.
Change values in the file serverDZ.cfg:
defaultVisibility = 2200;
defaultObjectViewDistance = 2200;
Edit the parameters viewDistance
and preferredObjectViewDistance
in the file windowsusername_settings.DayZProfile in the folder documents/DayZ.
...
shadowZDistance=250; ==> just testing with 500 instead of 250 (original); looking to rise the value to about 750/800.
viewDistance=940.953; ==> set it to 2200
preferredObjectViewDistance=808.56128; ==> set it to 2200
...
For me, the most important feature provided by the messages.xml is (was!) the "shutdown" (restart) feature. Unfortunately, this feature does not restart the server in all the times requested - from time to time, it only stops the server, without restarting it. Not a reliable feature... (But!), Recently, I found a video by TheGamingchef on YT, in which he demonstrates a great tool for DayZ server management: BEC, BattlEye-Extended-Controls.
So, having said that, we come back to the messages.xml file. Check on Youtube, and see on BIstudio Community for more information.
You will find an example messages.xml file in the folder mpmissions/dayOfflince.enoch/db.
Onconnect: Displays a message as soon as a player joins.
Repeat: Repeats the message each x minutes
Countdown: Counts down to 0 minutes, till the message will be displayed
90, 60, 45, 30, 20, 10, 5, 2, 1 minutes
Shutdown: Only in combination with countdown; Is countdown not set, so shutdown will be ignored!
Delay:
-
Delay in miuntes.
-
Can be used with onconnect.
-
If value = 0, the message will be displayed immediately.
Repeat: Message will be repeated each x minutes.
Messages must not have more than als 160 characters, and must not have more than 3 variables:
-
#name (Name des Servers)
-
#port (Port des Servers)
-
#tmin (Verbleibende Zeit in Minuten von countdown)
messages.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<messages>
<message>
<repeat>15</repeat>
<text>You're playing on my server (#name). Thank you .)</text>
</message>
<!-- This is example message for automatic server termination -->
<message>
<!-- no delay -->
<delay>0</delay>
<!-- if the value is larger than 0, then flag Repeat is enabled -->
<repeat>0</repeat>
<!-- if the value is larger than 0, then flag Countdown is enabled,
countdown reaches zero in 10 hours -->
<deadline>600</deadline>
<!-- disable On connect flag -->
<onConnect>0</onConnect>
<!-- enable Shutdown flag -->
<shutdown>1</shutdown>
<!-- message itself with placeholders -->
<text>Hello, #name will shutdown in #tmin minutes.</text>
</message>
</messages>
The file init.c can be used to set the player's spawn loadout. Check on TDcomm's Youtube, examples on GravityWolfNotAmused Github, Scalespeeder Github and Bealze Github.
That is the configuration I am using on my server:
...
override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
player.RemoveAllItems();
// DC-branded equipment
player.GetInventory().CreateInInventory("DC_Starter_BeanieHat"); // Namalsk: DC_Starter_Winter_BeanieHat
player.GetInventory().CreateInInventory("DC_Starter_TShirt"); // Namalsk: DC_Starter_Winter_Hoodie
player.GetInventory().CreateInInventory("DC_Starter_Jeans"); // Namalsk: DC_Starter_Winter_Jeans
player.GetInventory().CreateInInventory("DC_Starter_Sneakers"); // Namalsk: DC_Starter_Winter_Sneakers
player.GetInventory().CreateInInventory("DC_ImpCourierBag");
player.GetInventory().CreateInInventory("DC_SodaCan_Pilsner");
player.GetInventory().CreateInInventory("TunaCan_Opened");
ItemBase knife = player.GetInventory().CreateInInventory("StoneKnife");
ItemBase rags = player.GetInventory().CreateInInventory("Rag");
ItemBase watch = player.GetInventory().CreateInInventory("tool_watch2"); // Namalsk, only
ItemBase pda = player.GetInventory().CreateInInventory("ItemPDA"); // required: @GearPDA
pda.GetInventory().CreateAttachment("Battery9V");
// Assign quickslots 0 to 3
player.SetQuickBarEntityShortcut(knife, 0, true);
player.SetQuickBarEntityShortcut(rags, 1, true);
player.SetQuickBarEntityShortcut(watch, 2, true);
player.SetQuickBarEntityShortcut(pda, 3, true);
player.GetStatWater().Set( 900 );
player.GetStatEnergy().Set( 1100 );
}
...
Source: [Discord](https://d.docs.live.net/e78a9aefdc4e9639/Dokumente/DayZ/Day - Documentation COPY/Discord)
Variable | Type | Default | Description |
---|---|---|---|
AnimalMaxCount | Integer | 200 | Maximal limit of spawned animals (not ambient) across all zones in map |
CleanupAvoidance | Integer | 100 | (m) Distance from player required for item deletion |
CleanupLifetimeDeadAnimal | Integer | 1200 | (sec) Default lifetime for dead animals |
CleanupLifetimeDeadInfected | Integer | 330 | (sec) Default lifetime for dead infected |
CleanupLifetimeDeadPlayer | Integer | 3600 | (sec) Default lifetime for dead player |
CleanupLifetimeDefault | Integer | 45 | (sec) Default lifetime for entities with no specific economy setup, but damage >= 1.0 (ie. dead) |
CleanupLifetimeLimit | Integer | 50 | How many items can be deleted at once during standard cleanup |
CleanupLifetimeRuined | Integer | 330 | (sec) Default lifetime for ruined loot |
FlagRefreshFrequency | Integer | 432000 | (sec) Items lifetime will be refreshed with this frequency. |
FlagRefreshMaxDuration | Integer | 3456000 | (sec) How long the flag will be refreshing items. |
IdleModeCountdown | Integer | 60 | (sec) Activate economy idle mode on empty server after given time |
IdleModeStartup | Integer | 1 | Enable economy idle mode on server startup |
InitialSpawn | Integer | 100 | (%) How much loot will be spawned on server initial start (without storage). |
LootProxyPlacement | Integer | 1 | Allow dispatch containers to receive the loot. |
RespawnAttempt | Integer | 2 | How many attempts are performed during single item respawn |
RespawnLimit | Integer | 20 | How many items of one type can be spawned at once |
RespawnTypes | Integer | 12 | How many different types can be respawned at once |
RestartSpawn | Integer | 0 | (%) How much loot should be respawned during restart to nominal |
SpawnInitial | Integer | 1200 | How many initial test are allowed for item spawn |
TimeHopping | Integer | 60 | (sec) penalty time for server hoppers |
TimeLogin | Integer | 15 | (sec) default login time |
TimeLogout | Integer | 15 | (sec) default logout time |
TimePenalty | Integer | 20 | (sec) penalty time for player that is still in play session |
ZombieMaxCount | Integer | 1000 | Maximal limit of spawned zombies across all zones in map |
ZoneSpawnDist | Integer | 300 | (m) Distance to invoke infected spawn in nearby zone (dynamic infected) |
WorldWetTempUpdate | Integer | 1 | Allow update of wetness and temperature values on all items in the world. |
FoodDecay | Integer | 1 | Allow decay on food (requires WorldWetTempUpdate set to 1). |
parameter | example | description |
---|---|---|
tag | <tag name="shelves"/> |
Loot location inside a group; 1 value per item (shelves, floor) |
usage | <usage name="Town"/> |
Attached to or cargo of which object type the item should spawn in. (Coast, Farm, etc.) |
value | <value name="Tier3"/> |
The tier-zone, in which the item can spawn in. |
Namalsk | Chernarus | Livonia |
---|---|---|
bags | ||
books | books | |
clothes | clothes | clothes |
containers | containers | containers |
explosives | explosives | explosives |
food | food | food |
lore | ||
pistols | ||
rifles | ||
tools | tools | tools |
vehiclesparts | vehiclesparts | vehiclesparts |
weapons | weapons | weapons |
lore | ||
lantia |
Namalsk is using tag name
instead of usage name
Chernarus | Livonia | Namalsk |
---|---|---|
Military | Military | |
Police | Police | |
Medic | Medic | |
Firefighter | Firefighter | |
Industrial | Industrial | |
Farm | Farm | |
Coast | Coast | |
Town | Town | |
Village | Village | |
Hunting | Hunting | |
Office | Office | |
School | School | |
Prison | Prison | |
SeasonalEvent | SeasonalEvent | |
ContaminatedArea | ContaminatedArea | |
Lunapark | ||
Special | ||
Lunapark | ||
Underground | ||
TownVillage | TownVillage | |
TownVillageOfficeSchool | TownVillageOfficeSchool |
Chernarus | Livonia | Namalsk |
---|---|---|
floor | floor | military |
shelves | shelves | civilian |
ground | ground | hunting |
police | ||
industrial | ||
farm | ||
medical | ||
firefighter | ||
fishing | ||
seaice | ||
seasonalevent |
Do not use value name
on Namalsk, but user name
!
Chernarus | Livonia | Namalsk |
---|---|---|
Tier1 | Tier1 | Tier1 |
Tier2 | Tier2 | Tier2 |
Tier3 | Tier3 | Tier3 |
Tier4 | Tier4 | |
Tier5 | ||
Tier6 | ||
Tier7 | ||
Unique | Unique |
Chernarus | Livonia | Namalsk |
---|---|---|
Tier1 | ||
Tier2 | ||
Tier3 | ||
Tier4 | ||
Tier5 | ||
Tier6 | ||
Tier7 | ||
Tier12 | Tier12 | Tier12 |
Tier23 | Tier23 | Tier23 |
Tier34 | Tier34 | |
Tier45 | ||
Tier56 | ||
Tier67 | ||
Tier123 | Tier123 | Tier123 |
Tier234 | Tier234 | |
Tier345 | ||
Tier456 | ||
Tier1234 | Tier1243 |
Chernarus | Livonia | Namalsk |
---|---|---|
loot | loot | Around |
lootFactory | lootFactory | AroundAndOn |
lootFloor | lootFloor | Backpack |
lootgalery | lootgalery | Bags |
lootGround | lootGround | BottomFloor |
lootroom | lootroom | BottomStorage |
lootShelves | lootshelves | FireExt |
lootweapons | lootweapons | FirstFloor |
lootTools | Floor | |
lootFood | FloorCivilian | |
FloorCivWeapons | ||
FloorIndustrial | ||
FloorNShelves | ||
FullMilitary | ||
Ground | ||
HeliportLeftovers | ||
Inside | ||
InsideAndOn | ||
InsideMilitary | ||
InsideMix | ||
lootFloor | ||
lootshelves | ||
MilitaryRifles | ||
MixedMilitary | ||
Outside | ||
Platform | ||
Rifles | ||
RiflesPistols | ||
Roof | ||
SecondFloor | ||
SniperPost | ||
Storage | ||
StorageArmory | ||
StorageLab | ||
StorageMed | ||
StorageMil | ||
ThirdFloor | ||
Tools | ||
UnderRoof | ||
UpperFloors | ||
UpperStorage | ||
Weapons |
helpthedeadwalk released an articel on reddit in February 2023, which describes the parameters for the loot economy:
how does the Central Loot Economy work?
Loot spawns based on a number of attributes, but in general there is min/max/location. The server will spawn up to max, queue up what it can't spawn (due to lack of appropriate open locations) and will respawn when min is reached. Min can be reached by a player looting an item or having its lifetime expire. There are other attributes as well, but that's the TLDR.
Loot items have the following attributes:
attribute | description |
---|---|
LIFETIME (seconds) | time until despawn. Reset on last interaction or while in a container. |
RESTOCK (seconds) | time until an item is placed into the spawn queue. This can be used to prevent the "loot waves" of similar items, but is hardly used. |
NOMINAL(MAX) | maximum number of a particular item that the server will allow spawned into the world at once. |
MIN | minimum number os a particular item that server will allow until respawn starts. items are respawned up to NOMIMAL and/or queued RESTOCK seconds apart. |
QUANTMIN/MAX | percent range that a container may be filled on spawn. Use for items like water bottles, canteens, mags, pills, etc. |
VALUE | Tier 1,2,3,4 & Unique (any or all). Indicates which zone to spawn. Zones are specific areas of the map. Chernarus has 4 tiers, while Livonia has 3. |
Chernarus Loot Tier Map and Livonia Loot Tier Map. Unique Map Areas | |
USAGE | Type of structure loot will spawn in or on (Military, Police, Farm, Village, Town, Hunting, School, Industrial, Medic, Firefighter, Prison, Coast). Location definitions |
FLAGS | various other attributes. |
IN_CARGO | when determining MAX, count items in cargo (vehicle inventory) |
IN_HOARDER | when determining MAX, count items in storage (tents, barrels, crates, chests as well as buried stashes). This is the attribute that makes items truly RARE since above ground storage items last for 45 days without interaction and buried stashes last 14 days without interaction. |
IN_MAP | when determining MAX, count items on the map. Always used. |
IN_PLAYER | when determining MAX, count items in a players inventory, but ONLY WHILE A PLAYER IS LOGGED IN. |
DELOOT | refers to items that can only be found at a Dynamic Events |
Dynamic Events generally spawn vehicle and wrecks of a certain type, which then determines the type of loot (PoliceConvoy/Police, HeliCrash/Military, MilitaryConvoy/Military, Train/Military+Industrial) | |
CRAFTED | is an item that can only be crafted. |
Another very good site to lookup for more information about the loot economy is https://dayz.fandom.com/wiki/Loot#Conditions.
If a user is crashing the server while logging in, or a user has to be removed for other reasons, the following steps should be taken to remove the player from the server's database:
- Stop the server! Do not modify the database while the server is running!
- Download and install DB Browser for SQLite
- Run SQLite
- Download the database
players.db
file from your server (path is /mpmissions/server.name/storage_1):
- Select Open file in SQLite:
- and select the file
player.db
:
- That should result in something like:
- In SQLite go to the tab "Browse Data":
- Select
Players
:
- Search for the player ID, which you can find either using CFTools:
or open one of the ADM-files in the servers congig
folder
- Copy&Paste the ID into the fiter
- Select the UID and click the
delete record
icon in the icon rib:
- Save the change by clicking
Write Changes
-
Upload the changed database file to your server.
-
Restart your server. The player will start as a fresh spawn ;-)
-
Stop your server.
-
Navigate to mpmissions -> your currently running mission
-
Delete the folder /storage_XXXXX where XXXXX is your server ID (Server ID is found at the end of your server's gamepanel URL)
-
Restart the server
db/events.xml If an event is triggerd, then the objects children will spawn in.
Conditions are:
<nominal>
The Spawner tries 50 to activate 50 events.
<min/max>
: A minimum of 25 and a maximum of 100 events should take place.
Children min, max
The exent should spawn in between 0 and 80 Zombies of the given type.
<lifetime>
Time in seconds after the spawn the item will remain on the map, IF it is outside of the cleanradius
<restock>
If set to 0, then CE tries to spawn in mass; if set to a positive value (seconds), then this is the time before ONE item will be spawned in again.
<saferadius>
Necessary distance (in meter) between player and spawn point to trigger the spawn in.
<distanceradius>
Distance (in meter) between items of simular type. For example, Zombie spawn will not work in towns, if the distance is below 50m!
<cleanupradius>
Zombie will despawn after lifetime
, if player left that radius.
db/globals.xml ZombieMaxCount
defines the maximum number of zombies on the server.
env/zombie_teritories.xml Controlls the number of zombie events, as soon as the disctance to an event coordinate fall bewlo the radius. The number of events is between dmin
and dmax
.
In order to spawn loot in buildings that are placed on the map via cfggameplay.json or the DayZ Editor Loader
, the respective building (object) must be entered into the mapgrouppos.xml are listed.
Example: A barracks should be on the coast of Namalsk
Place and align the barracks according to your desire with the DayZ Editor
. Export the data as JSON, save it in the folder custom_JSON
and reference it in cfggameplay.json.
Make sure that the alignment in the JSON and XML files is arranged differently:
- JSON-file: Y P R, plus the
a
- You have to calculate the a-value! - XML-file: R P Y
Scalespeeder offers a small Excel tool on his Github- or you can export the data directly to the DayZ Editor
as a mapgrouppos file!
**Copy the JSON-file to your server:**
Namalsk_Barrack_Coast_North.json
{
"Objects": [
{
"name": "Land_Mil_Barracks2", <== Dieses Objekt sollte Loot spawnen
"pos": [
8516.037109375,
20.774145126342775,
11092.6083984375
],
"ypr": [
44.99996566772461, <== Y(aw) = Rotation
-0.0, <== P(itch) = front/back
-0.0 <== R(ole) = left/right
]
},
{
"name": "bldr_Platform1_Stairs_20", <== Dieses Objekt soll kein Loot spawnen (möglich wäre es)
"pos": [
8520.669921875,
18.209999084472658,
11085.5
],
"ypr": [
45.0,
0.0,
0.0
]
}
]
}
**Add the link to the cfggameplay.json file:
"WorldsData":
{
"lightingConfig": 222,
"objectSpawnersArr": ["custom_JSON/Namalsk_Barrack_Coast_North.json"]
},
The data of the xml file, which as been exported from the xml file created by the DayZ Editor
has to be added to the mapgroupspos.xml file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<map>
<group name="Land_Mil_Barracks2" pos="8516.037109 20.774145 11092.608398" rpy="-0.000000 -0.000000 44.999966" a="45"/>
<group name="bldr_Platform1_Stairs_20" pos="8520.669922 18.209999 11085.500000" rpy="0.000000 0.000000 45.000000" a="45"/>
...
</map>
Create additional relative loot spawn positions to specific object (like the Resident Evil house) by following Josie Garfunkle’s tutorial on Youtube.
https://replit.com/@DonSibley/DayZLootSpawnCalculator
He offers a nice tiny tool on his Dicord, which calculates the relative parameters.
You can configure items like backpacks, weapons, etc. to spawn with attachments or containing items:
<!-- example lines cfgspawnabletypes.xml -->
<type name="Loftd_carabinbelt" >
<attachments chance="0.25" >
<item name="Loftd_carabin" chance="1.00" />
<attachments preset="addgloves" />
</attachments>
</type>
Repeatable attachments or items can be configured as preset in the cfgrandompresets.xml
<!-- example for cfgramdompresets.xml -->
<attachments chance="0.25" name="addgloves" >
<item name="WorkingGloves_Beige" chance="0.05" />
<item name="WorkingGloves_Black" chance="0.05" />
<item name="WorkingGloves_Brown" chance="0.05" />
<item name="WorkingGloves_Yellow" chance="0.05" />
<item name="TacticalGloves_Beige" chance="0.05" />
<item name="TacticalGloves_Black" chance="0.05" />
<item name="TacticalGloves_Green" chance="0.05" />
<item name="OMNOGloves_Gray" chance="0.05" />
<item name="OMNOGloves_Brown" chance="0.05" />
<item name="Loftd_militarygloves" chance="0.05" />
<item name="Loftd_militarysetgloves" chance="0.05" />
<item name="Loftd_leathergloves" chance="0.05" />
<item name="Loftd_CHRSAT_gloves" chance="0.05" />
<item name="MSFC_Gloves_MulticamSnow" chance="0.05" />
<item name="MSFC_NBC_Gloves_MulticamSnow" chance="0.05" />
<item name="Fingerless_Gloves" chance="0.05" />
<item name="Fingerless_Gloves_Brown" chance="0.05" />
<item name="Fingerless_Gloves_Wool" chance="0.05" />
<item name="Fingerless_Gloves_Wool_Grey" chance="0.05" />
<item name="Fingerless_Gloves_Wool_Black" chance="0.05" />
</attachments>
The sum of chances must be 100% - you can calculate the wighted chance in precent:
DayZ - cfgrandomspawnables calculation weighted loot chance.xlsx
An other example is the tool belt as part of one of my favoite workshops LoftDModGR
:
<type name="Loftd_toolbelt" >
<attachments preset="addaknife" />
<attachments chance="0.25" >
<item name="Loftd_Militarycompass" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="Loftd_canteenpouch_black" chance="0.34" >
<attachments chance="0.25" >
<item name="dzn_Canteen" chance="1.00" />
</attachments>
</item>
<item name="Loftd_canteenpouch_blackw" chance="0.33" >
<attachments chance="0.25" >
<item name="dzn_Canteen" chance="1.00" />
</attachments>
</item>
<item name="Loftd_canteenpouch_green" chance="0.33" >
<attachments chance="0.25" >
<item name="dzn_Canteen" chance="1.00" />
</attachments>
</item>
</attachments>
<attachments chance="0.25" >
<item name="Hammer" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="Rope" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="Lockpick" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="Wrench" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="HandSaw" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="HuntingKnife" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="Crowbar" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="EpoxyPutty" chance="1.00" />
</attachments>
<attachments chance="0.25" >
<item name="Pen_Black" chance="0.25" />
<item name="Pen_Blue" chance="0.25" />
<item name="Pen_Green" chance="0.25" />
<item name="Pen_Red" chance="0.25" />
</attachments>
<attachments chance="0.25" >
<item name="Plier" chance="0.40" />
<item name="Pliers_Yellow" chance="0.30" /> <!-- CJ187 More Tools -->
<item name="Pliers_Red" chance="0.30" /> <!-- CJ187 More Tools -->
</attachments>
<attachments chance="0.25" >
<item name="Screwdriver" chance="0.60" />
<item name="Screwdriver_2" chance="0.40" /> <!-- CJ187 More Tools -->
</attachments>
</type>
Important It is possible to spawn in objects using that JSON-file, which are consistant, but the orientation of the objects cannot be defined!
Example: Gaspump
{
„Areas“:[
{
„AreaName“:“Green_MNT“,
„Type“:“Land_FuelStation_Feed“,
„Data“:{
„Pos“:[ 3690.978027, 0, 5995.591797]
}
}
Alternativally, the traderconfig.txt of Dr. Jones can be used - that offers the posibility to configure the orientation of each object.
An other way it to use the DayZ Editor
to create a JSON file. Copy/paste that file into the folder /custome_json
.Install the DayZ Editor Loader plus the required Dabs Framework.
Check that video on Youtube about how to implement working gas pumps.
https://community.bistudio.com/wiki/Stringtable.csv
Although the engine uses other files with the extension CSV, the file for missions, addons, and campaigns is stringtable.csv
and must be located in the primary folder of the mission/addon/campaign.
In point of fact, the naming convention inside a csv is such that the first three letters of any variable (more later) must begin with STR, and referenced in mission.sqm, description.ext or anywhere else as $STRsomething.
The characters STR
tell the engine to look in stringtable.csv
as opposed to use the literal string value.
displayName = "#pda_item_name";
descriptionShort = "#pda_item_desc";
title = "#syb_homebook_name";
language.csv
Language, English,Turkish,French
STR_BROKEN,Broken, Bozuk, Merde
STR_GOOD, Good, İyi,
STR_BAD, Bad, Kotu, Merde, Encore
STR_FIXED, Fixed, Sabit, "Merde, Encore"
STR_ONE, One, , Une
My recommendation is to make local backups of all your server configuration files. Nitrado make backup, but these are not based on single files, but on volumes. So, a restore will be possible only for the whole server!
I make backups of the following folders at least once a week:
/mpmissions/Namalsk
/config
Zur Bereitstellung auf dem Server müssen nur zwei Events (ein dynamischer und ein statischer) aktiviert werden. Zusätzlich können die Spawn Events angepasst werden, also die Anzahl der Weihnachtsbäume mit Geschenkpaketen und die Häufigkeit der Santa Claus-Crashes.
Auf Chernarus und Livonia/Enoch ist dies ohne weiteres möglich, da alle Vorbereitungen bereits getroffen wurden:
<!-- types.xml -->
<type name="ChristmasTree_Green"> <!-- Watch out: This is the GREEN tree, not the normal one, which is brownish -->
<nominal>0</nominal>
<lifetime>3</lifetime>
<restock>0</restock>
<min>0</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"/>
</type>
...
<type name="Wreck_SantasSleigh">
<nominal>0</nominal>
<lifetime>3</lifetime>
<restock>0</restock>
<min>0</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"/>
</type>
...
<!-- (spawning in the giftboxes) -->
<type name="GiftBox_Large_1">
<nominal>15</nominal>
<lifetime>7200</lifetime>
<restock>0</restock>
<min>10</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="containers"/>
<tag name="floor"/>
<tag name="shelves"/>
<usage name="Town"/>
<usage name="Village"/>
<usage name="SeasonalEvent"/>
</type>
<!-- events.xml -->
<!-- StaticSantaCrash (dynamischer Event) -->
<event name="StaticSantaCrash">
<nominal>8</nominal>
<min>8</min>
<max>8</max>
<lifetime>2100</lifetime>
<restock>0</restock>
<saferadius>1000</saferadius>
<distanceradius>1000</distanceradius>
<cleanupradius>1000</cleanupradius>
<secondary>InfectedSanta</secondary>
<flags deletable="1" init_random="0" remove_damaged="0"/>
<position>fixed</position>
<limit>child</limit>
<active>1</active> <!-- here, the event will be activated by setting avtive=1 -->
<children>
<child lootmax="15" lootmin="15" max="2" min="1" type="Wreck_SantasSleigh"/>
</children>
</event>
...
CHECK ON Discord
<!-- StaticChristmasTree (statischer Event) -->
<event name="StaticChristmasTree">
<nominal>13</nominal>
<min>0</min>
<max>0</max>
<lifetime>86400</lifetime>
<restock>0</restock>
<saferadius>100</saferadius>
<distanceradius>5</distanceradius>
<cleanupradius>2500</cleanupradius>
<flags deletable="0" init_random="0" remove_damaged="1"/>
<position>uniform</position>
<limit>child</limit>
<active>1</active> <!-- here, the event will be activated by setting avtive=1 -->
<children>
<child lootmax="0" lootmin="0" max="13" min="6" type="ChristmasTree_Green"/>
</children>
</event>