-
-
Notifications
You must be signed in to change notification settings - Fork 192
2. Configuration
Kamron Batman edited this page May 18, 2025
·
2 revisions
ModernUO is designed to be self-configuring!
When you start the server for the first time, it will prompt you with a few setup questions. Once complete, it generates a modernuo.json configuration file β the heart of your server settings.
If you ever want to reset your startup prompts, simply delete modernuo.json and restart the server.
It will walk you through setup again automatically.
ModernUO uses a few key JSON files to manage different parts of your server:
| File | Purpose |
|---|---|
modernuo.json |
Main server settings (networking, paths, options) |
antimacro.json |
Controls anti-macro behavior |
email-settings.json |
Email crash report and communication settings |
expansion.json |
Server expansion version and features |
server-access.json |
Protected account list (cannot be banned) |
throttles.json |
Packet throttling rules |
Each file can be edited manually, but will not take effect until the server restarts.
Example:
{
"assemblyDirectories": [
"./Assemblies"
],
"dataDirectories": [
"C:\\Ultima Online Classic"
],
"listeners": [
"0.0.0.0:2593"
],
"settings": {
// ... Various settings
}
}- assemblyDirectories: List of folders to scan for additional server assemblies.
- dataDirectories: Paths to your Ultima Online installation files (maps, art, etc.).
- listeners: Network addresses and ports to accept client connections.
- settings: Core server behavior settings (detailed below π).
| Key | Description | Default |
|---|---|---|
movement.delay.runFoot |
Delay (ms) between running footsteps on foot | 200 |
movement.delay.runMount |
Delay (ms) between running footsteps on a mount | 100 |
movement.delay.walkFoot |
Delay (ms) between walking footsteps on foot | 400 |
movement.delay.walkMount |
Delay (ms) between walking footsteps on a mount | 200 |
movement.delay.turn |
Delay (ms) when turning in place | 0 |
movement.throttleReset |
Time (ms) to reset movement throttle after a burst | 1000 |
movement.throttleThreshold |
Maximum burst movement threshold (ms) before throttling | 400 |
movement.delay.npcMinDex |
NPC delay at minimum Dexterity | 50 |
movement.delay.npcMaxDex |
NPC delay at maximum Dexterity | 200 |
movement.delay.npcMinIdle |
NPC idle movement delay (min) | 15 |
movement.delay.npcMaxIdle |
NPC idle movement delay (max) | 25 |
movement.delay.scaleSpeedByDex |
Scale NPC speed by Dex | Core.HS |
movement.delay.npcMinDelay |
Minimum NPC delay | 0.1 |
movement.delay.npcMaxDelay |
Maximum NPC delay | 0.4 |
| Key | Description | Default |
|---|---|---|
clientVerification.enable |
Enable client version verification | True |
clientVerification.ageLeniency |
Max account age leniency for client checking | 10.00:00:00 |
clientVerification.gameTimeLeniency |
Max total game time leniency for client checking | 1.01:00:00 |
clientVerification.invalidClientResponse |
Action when client fails verification (Kick, None, etc.) |
Kick |
clientVerification.kickDelay |
Delay before kicking invalid clients | 00:00:20 |
clientVerification.minRequired |
Min client version allowed | null |
clientVerification.maxRequired |
Max client version allowed | null |
clientVerification.allowedClientTypes |
Allowed client types | ClientType.Classic | ClientType.SA |
clientData.clientVersion |
Target client version | null |
| Key | Description | Default |
|---|---|---|
accountHandler.enableAutoAccountCreation |
Automatically create accounts on login | True |
accountHandler.enablePlayerPasswordCommand |
Allow .password command in-game |
False |
accountHandler.maxAccountsPerIP |
Maximum accounts allowed per IP address | 1 |
accountSecurity.encryptionAlgorithm |
Hash algorithm for storing passwords | "Argon2" |
| Key | Description | Default |
|---|---|---|
autoArchive.archiveLocally |
Enable local backups | True |
autoArchive.archivePath |
Directory to save archives | "Archives" |
autoArchive.backupPath |
Directory to save backups | "Backups" |
autoArchive.compressionFormat |
Compression method (Zstd, None, etc.) |
"Zstd" |
autoArchive.enableArchivePruning |
Enable deletion of old archives | True |
autosave.enabled |
Enable automatic world saves | True |
autosave.saveDelay |
Interval between auto-saves | "00:05:00" |
autosave.warningDelay |
Delay before announcing saves | "00:00:00" |
world.savePath |
Directory for world saves | "Saves" |
world.useMultithreadedSaves |
Use multi-threaded saving | True |
world.enableAutoRestart |
Enable auto-restart after crash | False |
world.tempArchivePath |
Temp path for archives | "temp" |
| Key | Description | Default |
|---|---|---|
crashGuard.enabled |
Enable crash detection | True |
crashGuard.generateReport |
Generate report on crash | True |
crashGuard.restartServer |
Automatically restart after crash | True |
crashGuard.saveBackup |
Save backup on crash | True |
| Key | Description | Default |
|---|---|---|
stats.gainChanceMultiplier |
Multiplier for stat gain chances | 1 |
stats.statMax |
Maximum value for any stat | 100 |
stats.primaryStatGainChance |
% chance to gain primary stat | 0.75 |
stats.gainDelay |
Delay between stat gain attempts | 10 min (or 0.05 min in ML) |
stats.petGainDelay |
Delay between pet stat gains | 5 min |
stats.usePub45StatGain |
Use Publish 45-style stat gain | depends on Core.ML |
stamina.additionalLossWhenBelow |
Extra stamina loss % when fatigued | 0.1 |
stamina.baseOverweightLoss |
Base stamina loss when overweight | 5 |
stamina.cannotMoveWhenFatigued |
Prevent movement when stamina is 0 | True |
stamina.enableMountStamina |
Enable mount stamina depletion | True |
stamina.stonesOverweightAllowance |
Stones carried before fatigue applies | 4 |
stamina.stonesPerOverweightLoss |
Stones per unit of stamina loss | 25 |
stamina.useMountStaminaOnlyWhenOverloaded |
Restrict mount stamina loss | Core.SA |
stamina.globalEtherealMountStamina |
Global stamina toggle | Core.ML |
These are not written to modernuo.json by default, but can be overridden.
| Key | Description | Default |
|---|---|---|
opl.enable |
Enable Object Property Lists | Core.AOS |
opl.enableForVendorBuy |
Show OPL when vendor selling items | true |
vendor.isInvulnerable |
Whether vendors are invulnerable | false |
melee.enableInstaHit |
Enable insta-hit mechanics | Core.UOR |
expansion.forceOldAnimations |
Force older animations | false |
accountGold.enable |
Enable gold tracking per char | Core.TOL |
accountGold.convertOnBank |
Convert bank gold on deposit | true |
accountGold.convertOnTrade |
Convert trade gold | false |
virtualChecks.useEditGump |
Use gump for checks | Core.TOL |
spellCasting.disableCastParalyze |
Disable paralyze while casting | true |
netstate.packetLoggingPath |
Log packets here | "Packets" |
pingServer.port |
Port for ping server | 12000 |
pingServer.maxConnections |
Max connections for ping server | 2048 |
maps.enablePre6000Trammel |
Enable pre-6000 Trammel maps | false |
system.localTimeZone |
Server local timezone | system default |
insurance.enable |
Enable item insurance | Core.AOS |
visibleDamage |
Show visible damage numbers | Core.AOS |
guildClickMessage |
Enable guild click messages | Core.AOS |
asciiClickMessage |
Enable ASCII click messages | Core.AOS |
actionDelay |
Delay between player actions | 500ms (AOS) |
factions.enabled |
Enable factions system | false |
profanityProtection.enabled |
Enable profanity filter | false |
profanityProtection.action |
Action on profanity | Disallow |
taming.enableBonding |
Enable pet bonding | Core.LBR |
guards.instantKill |
Guards instantly kill criminals | true |
{
"enabled": false,
"fromAddress": "support@modernuo.com",
"fromName": "ModernUO Team",
"crashAddress": "crashes@modernuo.com",
"crashName": "Crash Log",
"speechLogPageAddress": "support@modernuo.com",
"speechLogPageName": "GM Support Conversation",
"emailServer": "smtp.gmail.com",
"emailPort": 465,
"emailUsername": "support@modernuo.com",
"emailPassword": "Some Password 123",
"emailSendRetryCount": 5,
"emailSendRetryDelay": 3
}{
"Allowance": 3,
"LocationSize": 5,
"Enabled": false,
"Expire": "00:05:00",
"SkillsThatUseAntiMacro": {
// "SkillName": true/false
}
}{
"Id": 1,
"Name": "The Second Age",
"ClientFlags": "Felucca",
"SupportedFeatures": {
// "FeatureName": true/false
},
"CharacterFlags": {
// "FlagName": true/false
},
"HousingFlags": {
// "FlagName": true/false
},
"MobileStatusVersion": 3,
"MapSelectionFlags": {
"Felucca": true,
"Trammel": false,
"Ilshenar": false,
"Malas": false,
"Tokuno": false,
"TerMur": false
}
}{
"protectedAccounts": [
"AdminAccount1",
"OwnerAccount2"
]
}{
"0x03": 25,
"0x12": 25,
"0x75": 500,
"0xAD": 25
}Copyright Β© 2017-2025 Kamron Batman & ModernUO Dev Team, released under GPL 3.0