Server Config: Difference between revisions

From Vintage Story Wiki
(add translate tag)
(Marked this version for translation)
Line 3: Line 3:
__TOC__
__TOC__


== serverconfig.json ==
== serverconfig.json == <!--T:2-->
This is sample of serverconfig.json with explanations.
This is sample of serverconfig.json with explanations.


<!--T:3-->
You can learn more about some values on [[List of server commands]] and [[Setting up a Multiplayer Server]] pages.
You can learn more about some values on [[List of server commands]] and [[Setting up a Multiplayer Server]] pages.


<!--T:4-->
''Empty comments means that the value meaning is unclear, so if you know exactly what it does - feel free to fill comment with useful knowledge =)''
''Empty comments means that the value meaning is unclear, so if you know exactly what it does - feel free to fill comment with useful knowledge =)''


<!--T:5-->
<syntaxhighlight lang="py">
<syntaxhighlight lang="py">
{
{
Line 15: Line 18:
   "ConfigVersion": "1.3",
   "ConfigVersion": "1.3",


   #  
   <!--T:6-->
#  
   "ServerMonitor": true,
   "ServerMonitor": true,


   #  
   <!--T:7-->
#  
   "MasterserverUrl": "http://masterserver.vintagestory.at/api/v1/servers/",
   "MasterserverUrl": "http://masterserver.vintagestory.at/api/v1/servers/",


   # Makes clients time out after that amount of seconds have passed
   <!--T:8-->
# Makes clients time out after that amount of seconds have passed
   "ClientConnectionTimeout": 600,
   "ClientConnectionTimeout": 600,


   # Seems to have no use
   <!--T:9-->
# Seems to have no use
   "ClientPlayingTimeout": 60,
   "ClientPlayingTimeout": 60,


   # Has no use
   <!--T:10-->
# Has no use
   "BuildLogging": false,
   "BuildLogging": false,


   #  
   <!--T:11-->
#  
   "EntityDebugMode": false,
   "EntityDebugMode": false,


   # Width of the world
   <!--T:12-->
# Width of the world
   "MapSizeX": 1000000,
   "MapSizeX": 1000000,


   # Height of the world
   <!--T:13-->
# Height of the world
   "MapSizeY": 256,
   "MapSizeY": 256,


   # Length of the world
   <!--T:14-->
# Length of the world
   "MapSizeZ": 1000000,
   "MapSizeZ": 1000000,


   # 2-letter code of localization to use on this server. Determines language of server messages.
   <!--T:15-->
# 2-letter code of localization to use on this server. Determines language of server messages.
   "ServerLanguage": "en",
   "ServerLanguage": "en",


   # This tells the world generator to skip stripes of chunks. Useful for testing ore deposit generation.
   <!--T:16-->
# This tells the world generator to skip stripes of chunks. Useful for testing ore deposit generation.
   # i.e. if you set SkipEveryChunkRow to 3 and SkipEveryChunkRowWidth to 2, then every 3rd chunk strip there'll be 2 chunk strips missing
   # i.e. if you set SkipEveryChunkRow to 3 and SkipEveryChunkRowWidth to 2, then every 3rd chunk strip there'll be 2 chunk strips missing
   "SkipEveryChunkRow": 0,
   "SkipEveryChunkRow": 0,
   "SkipEveryChunkRowWidth": 0,
   "SkipEveryChunkRowWidth": 0,


   # Where server should look for mods. []
   <!--T:17-->
# Where server should look for mods. []
   "ModPaths": [
   "ModPaths": [
     "Mods",
     "Mods",
Line 56: Line 71:
   ],
   ],


   # Can be used for set up parameters of new world
   <!--T:18-->
# Can be used for set up parameters of new world
   "WorldConfig": {
   "WorldConfig": {
      
      
Line 62: Line 78:
     "Seed": "1234567890",
     "Seed": "1234567890",


     # Point to world file which should be loaded on server start (or created if not exists)
     <!--T:19-->
# Point to world file which should be loaded on server start (or created if not exists)
     "SaveFileLocation": "/absolute/path/to/Save/wold_file.vcdbs",
     "SaveFileLocation": "/absolute/path/to/Save/wold_file.vcdbs",


     # Defines a world name for new world
     <!--T:20-->
# Defines a world name for new world
     "WorldName": "Sample World Name",
     "WorldName": "Sample World Name",


     # There used to be a "Allow cheats" toggle in the create world screen that forbids the use of /gamemode creative even if you are an admin. The config for it is still there
     <!--T:21-->
# There used to be a "Allow cheats" toggle in the create world screen that forbids the use of /gamemode creative even if you are an admin. The config for it is still there
     "AllowCreativeMode": false,
     "AllowCreativeMode": false,


     # Defines preset of parameters for new world. Possible values: "creativebuilding","surviveandbuild", "exploration" and "wildernesssurvival" (theoretically - any string value)
     <!--T:22-->
# Defines preset of parameters for new world. Possible values: "creativebuilding","surviveandbuild", "exploration" and "wildernesssurvival" (theoretically - any string value)
     "PlayStyle": "surviveandbuild",
     "PlayStyle": "surviveandbuild",


     # A reference to an entry in the en.json. Basically, id for human-readable names for PlayStyle. Possible values: "preset-surviveandbuild", "preset-exploration", "preset-wildernesssurvival" and "creativebuilding"
     <!--T:23-->
# A reference to an entry in the en.json. Basically, id for human-readable names for PlayStyle. Possible values: "preset-surviveandbuild", "preset-exploration", "preset-wildernesssurvival" and "creativebuilding"
     "PlayStyleLangCode": "surviveandbuild",
     "PlayStyleLangCode": "surviveandbuild",


     # World generation type. Possible values: "standard", "superflat"
     <!--T:24-->
# World generation type. Possible values: "standard", "superflat"
     "WorldType": "standard",
     "WorldType": "standard",


     # Settings of new world. Basically can use the same properties as with /worldconfig
     <!--T:25-->
# Settings of new world. Basically can use the same properties as with /worldconfig
     "WorldConfiguration": {
     "WorldConfiguration": {
       "worldClimate": "realistic",
       "worldClimate": "realistic",
Line 89: Line 112:
     },
     },


     # Height of the world
     <!--T:26-->
# Height of the world
     "MapSizeY": null,
     "MapSizeY": null,


     # Anything you want to see in Author field, usually it's nickname
     <!--T:27-->
# Anything you want to see in Author field, usually it's nickname
     "CreatedByPlayerName": "John Smith",
     "CreatedByPlayerName": "John Smith",


     #  
     <!--T:28-->
#  
     "DisabledMods": []
     "DisabledMods": []
   },
   },


   #  
   <!--T:29-->
#  
   "NextPlayerGroupUid": 10,
   "NextPlayerGroupUid": 10,


   #  
   <!--T:30-->
#  
   "GroupChatHistorySize": 20,
   "GroupChatHistorySize": 20,


   #  
   <!--T:31-->
#  
   "MaxOwnedGroupChannelsPerUser": 10,
   "MaxOwnedGroupChannelsPerUser": 10,


   # Set up the server name, visible in the public server listing
   <!--T:32-->
# Set up the server name, visible in the public server listing
   "ServerName": "Name of your Vintage Story Server",
   "ServerName": "Name of your Vintage Story Server",


   # Has no use yet. It's supposed to be used for another piece of information in the public server detail page
   <!--T:33-->
# Has no use yet. It's supposed to be used for another piece of information in the public server detail page
   "ServerUrl": "https://www.vintagestory.at/",
   "ServerUrl": "https://www.vintagestory.at/",


   # Set up the servers description, visible in the public server listing. You can use VTML here (for example, <br> for line break)
   <!--T:34-->
# Set up the servers description, visible in the public server listing. You can use VTML here (for example, <br> for line break)
   "ServerDescription": "Sample description.<br>Next line of description.",
   "ServerDescription": "Sample description.<br>Next line of description.",


   # The message shown to players when they join. Placeholder {0} will be replaced with Player's nickname.
   <!--T:35-->
# The message shown to players when they join. Placeholder {0} will be replaced with Player's nickname.
   "WelcomeMessage": "Welcome, {0}. Don't forget to follow our rules.",
   "WelcomeMessage": "Welcome, {0}. Don't forget to follow our rules.",


   # What interface server should listen. If you don't specify one, it'll listen on all interfaces
   <!--T:36-->
# What interface server should listen. If you don't specify one, it'll listen on all interfaces
   "Ip": null,
   "Ip": null,


   # Port what server should listen. You may want to change this if you want to run server on custom port.
   <!--T:37-->
# Port what server should listen. You may want to change this if you want to run server on custom port.
   "Port": 42420,
   "Port": 42420,


   # If server should try to use upnp for port forwarding
   <!--T:38-->
# If server should try to use upnp for port forwarding
   "Upnp": false,
   "Upnp": false,


   #  
   <!--T:39-->
#  
   "CompressPackets": true,
   "CompressPackets": true,


   # Whether or not add this server to the public server listing
   <!--T:40-->
# Whether or not add this server to the public server listing
   "AdvertiseServer": true,
   "AdvertiseServer": true,


   # Maximum number of players. If an integer value is passed it will set the maxclients, which is the max concurrent players the server may have. Higher values requires more RAM and CPU
   <!--T:41-->
# Maximum number of players. If an integer value is passed it will set the maxclients, which is the max concurrent players the server may have. Higher values requires more RAM and CPU
   "MaxClients": 16,
   "MaxClients": 16,


   # Require a password for players to log in
   <!--T:42-->
# Require a password for players to log in
   "Password": "my secret password",
   "Password": "my secret password",


   # Max chunk radius. If an integer value is passed it will set the max chunk radius, which is the highest view distance a player may have. Higher values require more RAM
   <!--T:43-->
# Max chunk radius. If an integer value is passed it will set the max chunk radius, which is the highest view distance a player may have. Higher values require more RAM
   "MaxChunkRadius": 12,
   "MaxChunkRadius": 12,


   #  
   <!--T:44-->
#  
   "TickTime": 33.3333321,
   "TickTime": 33.3333321,


   #  
   <!--T:45-->
#  
   "BlockTickChunkRange": 3,
   "BlockTickChunkRange": 3,


   #  
   <!--T:46-->
#  
   "MaxMainThreadBlockTicks": 10000,
   "MaxMainThreadBlockTicks": 10000,


   # How many random ticks per chunk should be executed. Simply said, a higher value makes grass grow back faster.
   <!--T:47-->
# How many random ticks per chunk should be executed. Simply said, a higher value makes grass grow back faster.
   "RandomBlockTicksPerChunk": 16,
   "RandomBlockTicksPerChunk": 16,


   #  
   <!--T:48-->
#  
   "BlockTickInterval": 300,
   "BlockTickInterval": 300,


   #  
   <!--T:49-->
#  
   "Roles": [
   "Roles": [
     {
     {
Line 165: Line 212:
       "Code": "suvisitor",
       "Code": "suvisitor",


       # Role readable name
       <!--T:50-->
# Role readable name
       "Name": "Survival Visitor",
       "Name": "Survival Visitor",


       #  
       <!--T:51-->
#  
       "Description": "Can only visit this world and chat but not use/place/break anything",
       "Description": "Can only visit this world and chat but not use/place/break anything",


       #  
       <!--T:52-->
#  
       "PrivilegeLevel": -1,
       "PrivilegeLevel": -1,


       # (should be similar to global DefaultSpawn, but for role)
       <!--T:53-->
# (should be similar to global DefaultSpawn, but for role)
       "DefaultSpawn": null,
       "DefaultSpawn": null,


       #  
       <!--T:54-->
#  
       "ForcedSpawn": null,
       "ForcedSpawn": null,


       # list of granted priveleges (full list may be shown by "/list privileges" command)
       <!--T:55-->
# list of granted priveleges (full list may be shown by "/list privileges" command)
       "Privileges": [
       "Privileges": [
         "chat"
         "chat"
       ],
       ],


       #  
       <!--T:56-->
#  
       "RuntimePrivileges": [],
       "RuntimePrivileges": [],


       #  
       <!--T:57-->
#  
       "DefaultGameMode": 1,
       "DefaultGameMode": 1,


       #  
       <!--T:58-->
#  
       "Color": "Green",
       "Color": "Green",


       # Max allowed claimable area in cubic meters for every player that has this role (default: 4 chunks = 4*32*32*32 cubic meters = 131072)
       <!--T:59-->
# Max allowed claimable area in cubic meters for every player that has this role (default: 4 chunks = 4*32*32*32 cubic meters = 131072)
       "LandClaimAllowance": 0,
       "LandClaimAllowance": 0,


       # The smallest cuboid a player may claim (default 5x5x5)
       <!--T:60-->
# The smallest cuboid a player may claim (default 5x5x5)
       "LandClaimMinSize": {
       "LandClaimMinSize": {
         "X": 5,
         "X": 5,
Line 204: Line 262:
       },
       },


       # The max quantity of non adjacent-areasa a player may claim (default: 3)
       <!--T:61-->
# The max quantity of non adjacent-areasa a player may claim (default: 3)
       "LandClaimMaxAreas": 3,
       "LandClaimMaxAreas": 3,


       # "Super admin" parameter. If true, any privilege that has been registered by the game engine or any mod is automatically granted to this role
       <!--T:62-->
# "Super admin" parameter. If true, any privilege that has been registered by the game engine or any mod is automatically granted to this role
       "AutoGrant": false
       "AutoGrant": false
     },
     },
Line 213: Line 273:
   ],
   ],


   # Default role for new players
   <!--T:63-->
# Default role for new players
   "DefaultRoleCode": "suplayer",
   "DefaultRoleCode": "suplayer",


   # Sets antiabuse level, this protects against a range of malicious player operations, but is currently pretty glitchy in the current state (v1.7)
   <!--T:64-->
# Sets antiabuse level, this protects against a range of malicious player operations, but is currently pretty glitchy in the current state (v1.7)
   "AntiAbuse": 0,
   "AntiAbuse": 0,


   # Wether or not to only allow whitelisted players to connect to the server
   <!--T:65-->
# Wether or not to only allow whitelisted players to connect to the server
   "OnlyWhitelisted": false,
   "OnlyWhitelisted": false,


   # If true, every time a player joins the server verifies if that player is a valid, logged in, registered buyer of the game.  
   <!--T:66-->
# If true, every time a player joins the server verifies if that player is a valid, logged in, registered buyer of the game.  
   "VerifyPlayerAuth": true,
   "VerifyPlayerAuth": true,


   # Shows or sets the default spawn point. y can be omitted to automatically use the surface position at given x/z location.
   <!--T:67-->
# Shows or sets the default spawn point. y can be omitted to automatically use the surface position at given x/z location.
   "DefaultSpawn": {
   "DefaultSpawn": {
     "x": 500025,
     "x": 500025,
Line 235: Line 300:
   },
   },


   # If players can hit each other
   <!--T:68-->
# If players can hit each other
   "AllowPvP": true,
   "AllowPvP": true,


   #  
   <!--T:69-->
#  
   "AllowFireSpread": true,
   "AllowFireSpread": true,


   # Completely disables any falling block behavior
   <!--T:70-->
# Completely disables any falling block behavior
   "AllowFallingBlocks": true,
   "AllowFallingBlocks": true,


   # Run a command when server starts. For example, players without access to the server console can op themselves. [probably can run multiple commands by separating them with linebreaks(\n), need to test]
   <!--T:71-->
# Run a command when server starts. For example, players without access to the server console can op themselves. [probably can run multiple commands by separating them with linebreaks(\n), need to test]
   "StartupCommands": "/op Tyron"
   "StartupCommands": "/op Tyron"
    
    
Line 255: Line 324:
</syntaxhighlight>
</syntaxhighlight>


== servermagicnumbers.json ==
== servermagicnumbers.json == <!--T:72-->


<!--T:73-->
<syntaxhighlight lang="py">
<syntaxhighlight lang="py">


<!--T:74-->
{
{
   #The range an entity has to be in order for clients to receive regular updates for it. May be overriden by entities. The value is the max chunk distance. (e.g. 2 => update all entities not further away than 2 chunks in x/y any dir from a player)
   #The range an entity has to be in order for clients to receive regular updates for it. May be overriden by entities. The value is the max chunk distance. (e.g. 2 => update all entities not further away than 2 chunks in x/y any dir from a player)
Line 264: Line 335:
   "DefaultEntityTrackingRange": 4,
   "DefaultEntityTrackingRange": 4,


   #Cubic size of the chunks on the server (width, length and height)
   <!--T:75-->
#Cubic size of the chunks on the server (width, length and height)
   "ServerChunkSize": 32,
   "ServerChunkSize": 32,


   #This is ServerChunkSize - 1 if ServerChunkSize is a multiple of 2 (which it really should be)
   <!--T:76-->
#This is ServerChunkSize - 1 if ServerChunkSize is a multiple of 2 (which it really should be)
   "ServerChunkSizeMask": 31,
   "ServerChunkSizeMask": 31,


   #Size of the chunk column request buffer. Every chunk column of WorldGenPass Done needs to be surrounded by chunks of pass PreDone (3x3).  
   <!--T:77-->
#Size of the chunk column request buffer. Every chunk column of WorldGenPass Done needs to be surrounded by chunks of pass PreDone (3x3).  
   #Every PreDone chunk needs to be surrounded by Vegetation (5x5), every Vegetation chunk needs to be surrounded by terrainfeatures (7x7)
   #Every PreDone chunk needs to be surrounded by Vegetation (5x5), every Vegetation chunk needs to be surrounded by terrainfeatures (7x7)
   #So in order to complete at least chunk column we have to keep 7x7=49 chunk columns in the queue
   #So in order to complete at least chunk column we have to keep 7x7=49 chunk columns in the queue
   "RequestChunkColumnsQueueSize": 2000,
   "RequestChunkColumnsQueueSize": 2000,


   #Size of the chunk ready buffer. If buffer is full, the chunk gen thread no longer generates new chunks.  
   <!--T:78-->
#Size of the chunk ready buffer. If buffer is full, the chunk gen thread no longer generates new chunks.  
   #This value can probably stay fairly small because if the main thread is not the bottleneck it will never fill up, but when it is the bottleneck we don't want to overburden it with sending gazillions of chunks to clients.
   #This value can probably stay fairly small because if the main thread is not the bottleneck it will never fill up, but when it is the bottleneck we don't want to overburden it with sending gazillions of chunks to clients.
   "ReadyChunksQueueSize": 200,
   "ReadyChunksQueueSize": 200,


   #Amount of chunks the SendChunks System may request per tick. Setting this value too high might fill the buffer too quickly and give a disadvantage to other players chunk loading speed.
   <!--T:79-->
#Amount of chunks the SendChunks System may request per tick. Setting this value too high might fill the buffer too quickly and give a disadvantage to other players chunk loading speed.
   "ChunksColumnsToRequestPerTick": 1,
   "ChunksColumnsToRequestPerTick": 1,


   #Amount of chunks the SendChunks System may send per tick. Setting this value too high might overburden the client or the network.
   <!--T:80-->
#Amount of chunks the SendChunks System may send per tick. Setting this value too high might overburden the client or the network.
   "ChunksToSendPerTick": 32,
   "ChunksToSendPerTick": 32,


   #How often (at most) the SendChunks system should be called in ms (thread sleep time)
   <!--T:81-->
#How often (at most) the SendChunks system should be called in ms (thread sleep time)
   "ChunkRequestTickTime": 40,
   "ChunkRequestTickTime": 40,


   #Amount of chunks the LoadChunks System may generate per tick. Setting this value too might overburden the server.
   <!--T:82-->
#Amount of chunks the LoadChunks System may generate per tick. Setting this value too might overburden the server.
   "ChunkColumnsToGeneratePerThreadTick": 7,
   "ChunkColumnsToGeneratePerThreadTick": 7,


   #How many seconds between each autosave of the game world.
   <!--T:83-->
#How many seconds between each autosave of the game world.
   "ServerAutoSave": 300,
   "ServerAutoSave": 300,


   #Width and Length of the cube of chunks to load for the spawn area. Setting this value to high will overflow the request buffer.
   <!--T:84-->
#Width and Length of the cube of chunks to load for the spawn area. Setting this value to high will overflow the request buffer.
   "SpawnChunksWidth": 7,
   "SpawnChunksWidth": 7,


   #Amount of entities each client can track at most. If the number of spawned entitites near the player goes beyond this number the player will only see the first ones that spawned until some of them despawned
   <!--T:85-->
#Amount of entities each client can track at most. If the number of spawned entitites near the player goes beyond this number the player will only see the first ones that spawned until some of them despawned
   "TrackedEntitesPerClient": 1500,
   "TrackedEntitesPerClient": 1500,


   #Width and Length of Chunk regions
   <!--T:86-->
#Width and Length of Chunk regions
   "ChunkRegionSizeInChunks": 16,
   "ChunkRegionSizeInChunks": 16,


   #After how many seconds a new calendar packet should be sent out to the client. You might want to reduce this interval for very laggy server / client in order for server and client game time to stay in sync.
   <!--T:87-->
#After how many seconds a new calendar packet should be sent out to the client. You might want to reduce this interval for very laggy server / client in order for server and client game time to stay in sync.
   "CalendarPacketSecondInterval": 60,
   "CalendarPacketSecondInterval": 60,


   #After how many ms all the chunks should be checked if they can be unloaded
   <!--T:88-->
#After how many ms all the chunks should be checked if they can be unloaded
   "ChunkUnloadInterval": 4000,
   "ChunkUnloadInterval": 4000,


   #After how many milliseconds the chunk should get packed
   <!--T:89-->
#After how many milliseconds the chunk should get packed
   "UncompressedChunkTTL": 15000,
   "UncompressedChunkTTL": 15000,


   #After how many unused milliseconds the chunk should get unloaded
   <!--T:90-->
#After how many unused milliseconds the chunk should get unloaded
   "CompressedChunkTTL": 45000,
   "CompressedChunkTTL": 45000,


   #How much meter of the client position should leak into sever position (every 150ms), used as motion every 200ms
   <!--T:91-->
#How much meter of the client position should leak into sever position (every 150ms), used as motion every 200ms
   "PlayerDesyncTolerance": 0.02,
   "PlayerDesyncTolerance": 0.02,


   #How many intervalls (=150m) shall we toleratate clients position out of sync with servers position before we kick him (not used)
   <!--T:92-->
#How many intervalls (=150m) shall we toleratate clients position out of sync with servers position before we kick him (not used)
   "PlayerDesyncMaxIntervalls": 20.0,
   "PlayerDesyncMaxIntervalls": 20.0,


   #How often the chunk generator should run in ms (thread sleep time)
   <!--T:93-->
#How often the chunk generator should run in ms (thread sleep time)
   "ChunkThreadTickTime": 10
   "ChunkThreadTickTime": 10
}
}


<!--T:94-->
</syntaxhighlight>
</syntaxhighlight>


</translate>
</translate>

Revision as of 11:06, 17 February 2022

Other languages:

serverconfig.json

This is sample of serverconfig.json with explanations.

You can learn more about some values on List of server commands and Setting up a Multiplayer Server pages.

Empty comments means that the value meaning is unclear, so if you know exactly what it does - feel free to fill comment with useful knowledge =)

{
  # 
  "ConfigVersion": "1.3",

  # 
  "ServerMonitor": true,

  # 
  "MasterserverUrl": "http://masterserver.vintagestory.at/api/v1/servers/",

  # Makes clients time out after that amount of seconds have passed
  "ClientConnectionTimeout": 600,

  # Seems to have no use
  "ClientPlayingTimeout": 60,

  # Has no use
  "BuildLogging": false,

  # 
  "EntityDebugMode": false,

  # Width of the world
  "MapSizeX": 1000000,

  # Height of the world
  "MapSizeY": 256,

  # Length of the world
  "MapSizeZ": 1000000,

  # 2-letter code of localization to use on this server. Determines language of server messages.
  "ServerLanguage": "en",

  # This tells the world generator to skip stripes of chunks. Useful for testing ore deposit generation.
  # i.e. if you set SkipEveryChunkRow to 3 and SkipEveryChunkRowWidth to 2, then every 3rd chunk strip there'll be 2 chunk strips missing
  "SkipEveryChunkRow": 0,
  "SkipEveryChunkRowWidth": 0,

  # Where server should look for mods. []
  "ModPaths": [
    "Mods",
    "/absolute/path/to/Mods"
  ],

  # Can be used for set up parameters of new world
  "WorldConfig": {
    
    # Seed. Does not guarantee exactly the same world each time!
    "Seed": "1234567890",

    # Point to world file which should be loaded on server start (or created if not exists)
    "SaveFileLocation": "/absolute/path/to/Save/wold_file.vcdbs",

    # Defines a world name for new world
    "WorldName": "Sample World Name",

    # There used to be a "Allow cheats" toggle in the create world screen that forbids the use of /gamemode creative even if you are an admin. The config for it is still there
    "AllowCreativeMode": false,

    # Defines preset of parameters for new world. Possible values: "creativebuilding","surviveandbuild", "exploration" and "wildernesssurvival" (theoretically - any string value)
    "PlayStyle": "surviveandbuild",

    # A reference to an entry in the en.json. Basically, id for human-readable names for PlayStyle. Possible values: "preset-surviveandbuild", "preset-exploration", "preset-wildernesssurvival" and "creativebuilding"
    "PlayStyleLangCode": "surviveandbuild",

    # World generation type. Possible values: "standard", "superflat"
    "WorldType": "standard",

    # Settings of new world. Basically can use the same properties as with /worldconfig
    "WorldConfiguration": {
      "worldClimate": "realistic",
      "gameMode": "survival",
      "temporalStability": true,
      "temporalStorms": "sometimes",
      "graceTimer": "0"
    },

    # Height of the world
    "MapSizeY": null,

    # Anything you want to see in Author field, usually it's nickname
    "CreatedByPlayerName": "John Smith",

    # 
    "DisabledMods": []
  },

  # 
  "NextPlayerGroupUid": 10,

  # 
  "GroupChatHistorySize": 20,

  # 
  "MaxOwnedGroupChannelsPerUser": 10,

  # Set up the server name, visible in the public server listing
  "ServerName": "Name of your Vintage Story Server",

  # Has no use yet. It's supposed to be used for another piece of information in the public server detail page
  "ServerUrl": "https://www.vintagestory.at/",

  # Set up the servers description, visible in the public server listing. You can use VTML here (for example, <br> for line break)
  "ServerDescription": "Sample description.<br>Next line of description.",

  # The message shown to players when they join. Placeholder {0} will be replaced with Player's nickname.
  "WelcomeMessage": "Welcome, {0}. Don't forget to follow our rules.",

  # What interface server should listen. If you don't specify one, it'll listen on all interfaces
  "Ip": null,

  # Port what server should listen. You may want to change this if you want to run server on custom port.
  "Port": 42420,

  # If server should try to use upnp for port forwarding
  "Upnp": false,

  # 
  "CompressPackets": true,

  # Whether or not add this server to the public server listing
  "AdvertiseServer": true,

  # Maximum number of players. If an integer value is passed it will set the maxclients, which is the max concurrent players the server may have. Higher values requires more RAM and CPU
  "MaxClients": 16,

  # Require a password for players to log in
  "Password": "my secret password",

  # Max chunk radius. If an integer value is passed it will set the max chunk radius, which is the highest view distance a player may have. Higher values require more RAM
  "MaxChunkRadius": 12,

  # 
  "TickTime": 33.3333321,

  # 
  "BlockTickChunkRange": 3,

  # 
  "MaxMainThreadBlockTicks": 10000,

  # How many random ticks per chunk should be executed. Simply said, a higher value makes grass grow back faster.
  "RandomBlockTicksPerChunk": 16,

  # 
  "BlockTickInterval": 300,

  # 
  "Roles": [
    {
      # Role ID
      "Code": "suvisitor",

      # Role readable name
      "Name": "Survival Visitor",

      # 
      "Description": "Can only visit this world and chat but not use/place/break anything",

      # 
      "PrivilegeLevel": -1,

      # (should be similar to global DefaultSpawn, but for role)
      "DefaultSpawn": null,

      # 
      "ForcedSpawn": null,

      # list of granted priveleges (full list may be shown by "/list privileges" command)
      "Privileges": [
        "chat"
      ],

      # 
      "RuntimePrivileges": [],

      # 
      "DefaultGameMode": 1,

      # 
      "Color": "Green",

      # Max allowed claimable area in cubic meters for every player that has this role (default: 4 chunks = 4*32*32*32 cubic meters = 131072)
      "LandClaimAllowance": 0,

      # The smallest cuboid a player may claim (default 5x5x5)
      "LandClaimMinSize": {
        "X": 5,
        "Y": 5,
        "Z": 5
      },

      # The max quantity of non adjacent-areasa a player may claim (default: 3)
      "LandClaimMaxAreas": 3,

      # "Super admin" parameter. If true, any privilege that has been registered by the game engine or any mod is automatically granted to this role
      "AutoGrant": false
    },
    ...
  ],

  # Default role for new players
  "DefaultRoleCode": "suplayer",

  # Sets antiabuse level, this protects against a range of malicious player operations, but is currently pretty glitchy in the current state (v1.7)
  "AntiAbuse": 0,

  # Wether or not to only allow whitelisted players to connect to the server
  "OnlyWhitelisted": false,

  # If true, every time a player joins the server verifies if that player is a valid, logged in, registered buyer of the game. 
  "VerifyPlayerAuth": true,

  # Shows or sets the default spawn point. y can be omitted to automatically use the surface position at given x/z location.
  "DefaultSpawn": {
    "x": 500025,
    "y": 113,
    "z": 499954,
    "yaw": null,
    "pitch": null,
    "roll": null
  },

  # If players can hit each other
  "AllowPvP": true,

  # 
  "AllowFireSpread": true,

  # Completely disables any falling block behavior
  "AllowFallingBlocks": true,

  # Run a command when server starts. For example, players without access to the server console can op themselves. [probably can run multiple commands by separating them with linebreaks(\n), need to test]
  "StartupCommands": "/op Tyron"
  
  # 
  "RepairMode": false,
  
  # 
  "ChatRateLimitMs": 1000
}

servermagicnumbers.json

{
  #The range an entity has to be in order for clients to receive regular updates for it. May be overriden by entities. The value is the max chunk distance. (e.g. 2 => update all entities not further away than 2 chunks in x/y any dir from a player)
  #This value is capped by each players max chunk range.
  "DefaultEntityTrackingRange": 4,

  #Cubic size of the chunks on the server (width, length and height)
  "ServerChunkSize": 32,

  #This is ServerChunkSize - 1 if ServerChunkSize is a multiple of 2 (which it really should be)
  "ServerChunkSizeMask": 31,

  #Size of the chunk column request buffer. Every chunk column of WorldGenPass Done needs to be surrounded by chunks of pass PreDone (3x3). 
  #Every PreDone chunk needs to be surrounded by Vegetation (5x5), every Vegetation chunk needs to be surrounded by terrainfeatures (7x7)
  #So in order to complete at least chunk column we have to keep 7x7=49 chunk columns in the queue
  "RequestChunkColumnsQueueSize": 2000,

  #Size of the chunk ready buffer. If buffer is full, the chunk gen thread no longer generates new chunks. 
  #This value can probably stay fairly small because if the main thread is not the bottleneck it will never fill up, but when it is the bottleneck we don't want to overburden it with sending gazillions of chunks to clients.
  "ReadyChunksQueueSize": 200,

  #Amount of chunks the SendChunks System may request per tick. Setting this value too high might fill the buffer too quickly and give a disadvantage to other players chunk loading speed.
  "ChunksColumnsToRequestPerTick": 1,

  #Amount of chunks the SendChunks System may send per tick. Setting this value too high might overburden the client or the network.
  "ChunksToSendPerTick": 32,

  #How often (at most) the SendChunks system should be called in ms (thread sleep time)
  "ChunkRequestTickTime": 40,

  #Amount of chunks the LoadChunks System may generate per tick. Setting this value too might overburden the server.
  "ChunkColumnsToGeneratePerThreadTick": 7,

  #How many seconds between each autosave of the game world.
  "ServerAutoSave": 300,

  #Width and Length of the cube of chunks to load for the spawn area. Setting this value to high will overflow the request buffer.
  "SpawnChunksWidth": 7,

  #Amount of entities each client can track at most. If the number of spawned entitites near the player goes beyond this number the player will only see the first ones that spawned until some of them despawned
  "TrackedEntitesPerClient": 1500,

  #Width and Length of Chunk regions
  "ChunkRegionSizeInChunks": 16,

  #After how many seconds a new calendar packet should be sent out to the client. You might want to reduce this interval for very laggy server / client in order for server and client game time to stay in sync.
  "CalendarPacketSecondInterval": 60,

  #After how many ms all the chunks should be checked if they can be unloaded
  "ChunkUnloadInterval": 4000,

  #After how many milliseconds the chunk should get packed
  "UncompressedChunkTTL": 15000,

  #After how many unused milliseconds the chunk should get unloaded
  "CompressedChunkTTL": 45000,

  #How much meter of the client position should leak into sever position (every 150ms), used as motion every 200ms
  "PlayerDesyncTolerance": 0.02,

  #How many intervalls (=150m) shall we toleratate clients position out of sync with servers position before we kick him (not used)
  "PlayerDesyncMaxIntervalls": 20.0,

  #How often the chunk generator should run in ms (thread sleep time)
  "ChunkThreadTickTime": 10
}