Skip to content

2. Configuration

Kamron Batman edited this page May 18, 2025 · 2 revisions

Configuration

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.


πŸ“‚ Main Configuration Files

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.


πŸ› οΈ Basic Configuration (modernuo.json)

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 πŸ‘‡).

βš™οΈ Settings Breakdown

πŸƒ Movement Settings

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

πŸ”’ Client Verification Settings

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

πŸ‘€ Account Settings

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"

πŸ“¦ Archive & Save System

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"

πŸ“§ Crash Reporting

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

🧠 Stats & Stamina

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

πŸ§ͺ Hidden but Overridable Settings

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

πŸ“§ Email Settings (email-settings.json)

{
  "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
}

πŸ›‘οΈ Anti-Macro Configuration (antimacro.json)

{
  "Allowance": 3,
  "LocationSize": 5,
  "Enabled": false,
  "Expire": "00:05:00",
  "SkillsThatUseAntiMacro": {
    // "SkillName": true/false
  }
}

🌍 Expansion Details (expansion.json)

{
  "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
  }
}

πŸ‘‘ Protected Accounts (server-access.json)

{
  "protectedAccounts": [
    "AdminAccount1",
    "OwnerAccount2"
  ]
}

🧱 Packet Throttling (throttles.json)

{
  "0x03": 25,
  "0x12": 25,
  "0x75": 500,
  "0xAD": 25
}