ModernUO/docs/getting-started/configuration/index.html

118 lines
No EOL
82 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-getting-started/configuration" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Configuration | ModernUO</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" property="og:image" content="https://modernuo.com/branding/android-chrome-512x512.png"><meta data-rh="true" name="twitter:image" content="https://modernuo.com/branding/android-chrome-512x512.png"><meta data-rh="true" property="og:url" content="https://modernuo.com/docs/getting-started/configuration"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="twitter:card" content="summary"><meta data-rh="true" name="twitter:site" content="@modernuo"><meta data-rh="true" name="og:type" content="website"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Configuration | ModernUO"><meta data-rh="true" name="description" content="ModernUO is self-configuring. On first launch, the server walks you through an interactive setup and generates all required configuration files. After that, settings take effect on the next server restart (unless otherwise noted)."><meta data-rh="true" property="og:description" content="ModernUO is self-configuring. On first launch, the server walks you through an interactive setup and generates all required configuration files. After that, settings take effect on the next server restart (unless otherwise noted)."><link data-rh="true" rel="icon" href="/branding/favicon.png"><link data-rh="true" rel="canonical" href="https://modernuo.com/docs/getting-started/configuration"><link data-rh="true" rel="alternate" href="https://modernuo.com/docs/getting-started/configuration" hreflang="en"><link data-rh="true" rel="alternate" href="https://modernuo.com/docs/getting-started/configuration" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Configuration","item":"https://modernuo.com/docs/getting-started/configuration"}]}</script><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&amp;display=swap">
<link rel="apple-touch-icon" sizes="180x180" href="/branding/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/branding/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/branding/favicon-16x16.png">
<meta name="msapplication-TileImage" content="/branding/mstile-144x144.png"><link rel="stylesheet" href="/assets/css/styles.3e07de46.css">
<script src="/assets/js/runtime~main.c69d9f30.js" defer="defer"></script>
<script src="/assets/js/main.ef96f3b4.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>document.documentElement.setAttribute("data-theme","dark"),document.documentElement.setAttribute("data-theme-choice","dark"),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/branding/logo.svg"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/branding/logo.svg" alt="ModernUO Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/branding/logo.svg" alt="ModernUO Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">ModernUO</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/getting-started/installation">Docs</a><a href="/commands.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link navbar__link--internal">Commands<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><a href="/packets.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link navbar__link--internal">Packets<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item"><a href="https://muo.gg/discord" target="_blank" rel="noopener noreferrer" class="navbar-icon" aria-label="Discord" title="Discord"><svg viewBox="0 0 24 24" fill="currentColor" width="22" height="22"><path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.947 2.418-2.157 2.418z"/></svg></a></div><div class="navbar__item"><a href="https://github.com/modernuo/ModernUO" target="_blank" rel="noopener noreferrer" class="navbar-icon" aria-label="GitHub" title="GitHub"><svg viewBox="0 0 24 24" fill="currentColor" width="22" height="22"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg></a></div><div class="navbar__item"><a href="https://github.com/sponsors/modernuo" target="_blank" rel="noopener noreferrer" class="navbar-icon navbar-icon--sponsor" aria-label="Sponsor" title="Sponsor"><svg viewBox="0 0 24 24" fill="currentColor" width="20" height="20"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg></a></div><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/docs/getting-started/installation"><span title="Get Started" class="categoryLinkLabel_W154">Get Started</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/installation"><span title="Installation" class="linkLabel_WmDU">Installation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/building"><span title="Creating a Build" class="linkLabel_WmDU">Creating a Build</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/starting"><span title="Starting the Server" class="linkLabel_WmDU">Starting the Server</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/getting-started/configuration"><span title="Configuration" class="linkLabel_WmDU">Configuration</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/docs/development/items-and-mobiles"><span title="Content Development" class="categoryLinkLabel_W154">Content Development</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/development/items-and-mobiles"><span title="Items &amp; Mobiles" class="linkLabel_WmDU">Items &amp; Mobiles</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/development/serialization"><span title="Serialization" class="linkLabel_WmDU">Serialization</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/development/timers"><span title="Timers" class="linkLabel_WmDU">Timers</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/development/commands-and-targeting"><span title="Commands &amp; Targeting" class="linkLabel_WmDU">Commands &amp; Targeting</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/development/era-and-expansions"><span title="Era &amp; Expansions" class="linkLabel_WmDU">Era &amp; Expansions</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a href="/commands.html" target="_blank" rel="noopener noreferrer" class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true"><span title="Reference" class="categoryLinkLabel_W154">Reference</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item menu__link--internal"><a href="/commands.html" target="_blank" rel="noopener noreferrer" class="menu__link menuExternalLink_NmtK" tabindex="0"><span title="Commands" class="linkLabel_WmDU">Commands</span><svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item menu__link--internal"><a href="/packets.html" target="_blank" rel="noopener noreferrer" class="menu__link menuExternalLink_NmtK" tabindex="0"><span title="Packets" class="linkLabel_WmDU">Packets</span><svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Get Started</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Configuration</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Configuration</h1></header>
<p>ModernUO is self-configuring. On first launch, the server walks you through an interactive setup and generates all required configuration files. After that, settings take effect on the next server restart (unless otherwise noted).</p>
<p>All configuration files live in the <code>Configuration/</code> folder inside your <code>Distribution</code> directory.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuration-files">Configuration Files<a href="#configuration-files" class="hash-link" aria-label="Direct link to Configuration Files" title="Direct link to Configuration Files" translate="no"></a></h2>
<table><thead><tr><th>File</th><th>Purpose</th></tr></thead><tbody><tr><td><code>modernuo.json</code></td><td>Main server settings -- listeners, data paths, and all <code>settings</code> key-value pairs</td></tr><tr><td><code>expansion.json</code></td><td>Target expansion, enabled maps, and feature/client flags</td></tr><tr><td><code>antimacro.json</code></td><td>Anti-macro skill gain rules (per-skill toggle, area size, cooldowns)</td></tr><tr><td><code>email-settings.json</code></td><td>SMTP and crash report email configuration</td></tr><tr><td><code>server-access.json</code></td><td>Protected accounts that auto-reset to Owner access on login</td></tr><tr><td><code>throttles.json</code></td><td>Per-packet throttle delays in milliseconds</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>If you ever want to re-run the first-launch setup wizard, delete <code>modernuo.json</code> and <code>expansion.json</code>, then restart the server.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="modernuojson-structure">modernuo.json Structure<a href="#modernuojson-structure" class="hash-link" aria-label="Direct link to modernuo.json Structure" title="Direct link to modernuo.json Structure" translate="no"></a></h2>
<p>The main configuration file has four top-level keys:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;assemblyDirectories&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;./Assemblies&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;dataDirectories&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;/path/to/uo/game/files&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;listeners&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;0.0.0.0:2593&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;settings&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;accountHandler.maxAccountsPerIP&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;1&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;autosave.enabled&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;true&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;autosave.saveDelay&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;00:05:00&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<table><thead><tr><th>Key</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>assemblyDirectories</code></td><td>string array</td><td>Directories to search for additional plugin assemblies</td></tr><tr><td><code>dataDirectories</code></td><td>string array</td><td>Paths to Ultima Online game files (<code>.mul</code> / <code>.uop</code>)</td></tr><tr><td><code>listeners</code></td><td>string array</td><td>IP<!-- -->:port<!-- --> endpoints the server binds to</td></tr><tr><td><code>settings</code></td><td>key-value map</td><td>All configurable settings (string keys and string values)</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>All values in the <code>settings</code> map are stored as strings. The server parses them to the appropriate type (bool, int, TimeSpan, etc.) at startup. Unrecognized keys are silently ignored.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="feature-flags">Feature Flags<a href="#feature-flags" class="hash-link" aria-label="Direct link to Feature Flags" title="Direct link to Feature Flags" translate="no"></a></h2>
<p>ModernUO includes a runtime feature flag system for toggling game mechanics without restarting the server. Feature flags are managed by the <code>FeatureFlagManager</code> and stored in the <code>Configuration/FeatureFlags/</code> directory.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="built-in-flags">Built-in Flags<a href="#built-in-flags" class="hash-link" aria-label="Direct link to Built-in Flags" title="Direct link to Built-in Flags" translate="no"></a></h3>
<p>These boolean flags are optimized for hot-path checks and are synchronized from UOContent:</p>
<p><strong>Server-level flags</strong> (checked in the core engine):</p>
<table><thead><tr><th>Flag Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>player_trading</code></td><td><code>true</code></td><td>Allow players to trade items</td></tr><tr><td><code>pvp_combat</code></td><td><code>true</code></td><td>Allow player-vs-player combat</td></tr><tr><td><code>bank_access</code></td><td><code>true</code></td><td>Allow bank box access</td></tr><tr><td><code>speedhack_detection</code></td><td><code>false</code></td><td>Enable speed-hack detection via movement analysis</td></tr></tbody></table>
<p><strong>Content-level flags</strong> (checked in UOContent game logic):</p>
<table><thead><tr><th>Flag Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>vendor_purchase</code></td><td><code>true</code></td><td>Allow buying from NPC vendors</td></tr><tr><td><code>vendor_sell</code></td><td><code>true</code></td><td>Allow selling to NPC vendors</td></tr><tr><td><code>player_vendors</code></td><td><code>true</code></td><td>Allow player vendor usage</td></tr><tr><td><code>house_placement</code></td><td><code>true</code></td><td>Allow placing new houses</td></tr><tr><td><code>boat_placement</code></td><td><code>true</code></td><td>Allow placing new boats</td></tr><tr><td><code>bulk_orders</code></td><td><code>true</code></td><td>Allow bulk order deed system</td></tr><tr><td><code>passive_detect_hidden</code></td><td><code>true</code></td><td>Allow passive detect hidden skill</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="additional-blocking">Additional Blocking<a href="#additional-blocking" class="hash-link" aria-label="Direct link to Additional Blocking" title="Direct link to Additional Blocking" translate="no"></a></h3>
<p>Beyond boolean flags, the feature flag system also supports blocking specific:</p>
<ul>
<li class=""><strong>Gumps</strong> -- prevent specific UI dialogs from opening</li>
<li class=""><strong>Items</strong> -- block use, equip, or container access for specific item types</li>
<li class=""><strong>Skills</strong> -- disable individual skills with a custom message</li>
<li class=""><strong>Spells</strong> -- disable individual spells with a custom message</li>
</ul>
<p>These are managed through in-game admin commands and the feature flag admin gump, and are persisted as JSON files in <code>Configuration/FeatureFlags/</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="settings-reference">Settings Reference<a href="#settings-reference" class="hash-link" aria-label="Direct link to Settings Reference" title="Direct link to Settings Reference" translate="no"></a></h2>
<p>The tables below document every setting key available in the <code>settings</code> section of <code>modernuo.json</code>. Default values marked with an expansion name (e.g., <code>Core.AOS</code>) mean the default depends on your configured expansion.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="movement">Movement<a href="#movement" class="hash-link" aria-label="Direct link to Movement" title="Direct link to Movement" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>movement.delay.runFoot</code></td><td><code>200</code></td><td>Run speed on foot (ms)</td></tr><tr><td><code>movement.delay.runMount</code></td><td><code>100</code></td><td>Run speed while mounted (ms)</td></tr><tr><td><code>movement.delay.walkFoot</code></td><td><code>400</code></td><td>Walk speed on foot (ms)</td></tr><tr><td><code>movement.delay.walkMount</code></td><td><code>200</code></td><td>Walk speed while mounted (ms)</td></tr><tr><td><code>movement.delay.turn</code></td><td><code>0</code></td><td>Delay for turning in place (ms)</td></tr><tr><td><code>movement.delay.npcMinIdle</code></td><td><code>15</code></td><td>Minimum idle time for NPCs (seconds)</td></tr><tr><td><code>movement.delay.npcMaxIdle</code></td><td><code>25</code></td><td>Maximum idle time for NPCs (seconds)</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="movement-throttling">Movement Throttling<a href="#movement-throttling" class="hash-link" aria-label="Direct link to Movement Throttling" title="Direct link to Movement Throttling" translate="no"></a></h3>
<p>The movement throttle system uses RTT-based credit buffering to absorb network jitter while detecting speed hacks through movement rate analysis.</p>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>movementThrottle.debugLogging</code></td><td><code>false</code></td><td>Enable debug logging for movement throttle decisions</td></tr><tr><td><code>movementThrottle.maxCredit</code></td><td><code>200</code></td><td>Maximum credit buffer for timing jitter (ms)</td></tr><tr><td><code>movementThrottle.hardQueueLimit</code></td><td><code>10</code></td><td>Reject and clear movement queue at this depth</td></tr><tr><td><code>movementThrottle.movementHistorySize</code></td><td><code>20</code></td><td>Circular buffer size for rate analysis</td></tr><tr><td><code>movementThrottle.minSamplesForRate</code></td><td><code>8</code></td><td>Minimum movements before calculating speed</td></tr><tr><td><code>movementThrottle.suspiciousRateThreshold</code></td><td><code>1.05</code></td><td>Flag as suspicious at 5% over expected speed</td></tr><tr><td><code>movementThrottle.definiteRateThreshold</code></td><td><code>1.10</code></td><td>Flag as definite hack at 10% over expected speed</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Most movement throttle settings are auto-tuned and rarely need manual adjustment. The <code>debugLogging</code> flag is useful for diagnosing false positives.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="client-verification">Client Verification<a href="#client-verification" class="hash-link" aria-label="Direct link to Client Verification" title="Direct link to Client Verification" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>clientVerification.enable</code></td><td><code>true</code></td><td>Enable client version verification</td></tr><tr><td><code>clientVerification.ageLeniency</code></td><td><code>10.00:00:00</code> (10 days)</td><td>Grace period for new accounts before enforcing version checks</td></tr><tr><td><code>clientVerification.gameTimeLeniency</code></td><td><code>1.01:00:00</code></td><td>Grace period based on game time played</td></tr><tr><td><code>clientVerification.invalidClientResponse</code></td><td><code>Kick</code></td><td>Action on invalid client: <code>Kick</code>, <code>LenientKick</code>, <code>Annoy</code>, or <code>None</code></td></tr><tr><td><code>clientVerification.kickDelay</code></td><td><code>00:00:20</code> (20s)</td><td>Delay before kicking an invalid client</td></tr><tr><td><code>clientVerification.minRequired</code></td><td><code>null</code></td><td>Minimum allowed client version (e.g., <code>7.0.0.0</code>)</td></tr><tr><td><code>clientVerification.maxRequired</code></td><td><code>null</code></td><td>Maximum allowed client version</td></tr><tr><td><code>clientVerification.allowedClientTypes</code></td><td><code>Classic | SA</code></td><td>Allowed client types bitmask</td></tr><tr><td><code>clientData.clientVersion</code></td><td><code>null</code></td><td>Override the expected client version</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="accounts-and-security">Accounts and Security<a href="#accounts-and-security" class="hash-link" aria-label="Direct link to Accounts and Security" title="Direct link to Accounts and Security" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>accountHandler.enableAutoAccountCreation</code></td><td><code>true</code></td><td>Create accounts automatically on first login</td></tr><tr><td><code>accountHandler.enablePlayerPasswordCommand</code></td><td><code>false</code></td><td>Allow players to change password via in-game command</td></tr><tr><td><code>accountHandler.maxAccountsPerIP</code></td><td><code>1</code></td><td>Maximum accounts allowed per IP address</td></tr><tr><td><code>accountSecurity.encryptionAlgorithm</code></td><td><code>Argon2</code></td><td>Password hashing algorithm (<code>SHA2</code>, <code>PBKDF2</code>, or <code>Argon2</code>)</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Algorithms below <code>SHA2</code> (such as <code>MD5</code>, <code>SHA1</code>, <code>None</code>) are rejected at startup. They exist only for automatic password migration from legacy RunUO/ServUO databases.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="world-saves">World Saves<a href="#world-saves" class="hash-link" aria-label="Direct link to World Saves" title="Direct link to World Saves" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>world.savePath</code></td><td><code>Saves</code></td><td>Directory for world save files (relative to Distribution)</td></tr><tr><td><code>world.tempSavePath</code></td><td><code>temp</code></td><td>Temporary directory during save operations</td></tr><tr><td><code>world.useMultithreadedSaves</code></td><td><code>true</code></td><td>Use background threads for serialization during saves</td></tr><tr><td><code>world.enableAutoRestart</code></td><td><code>false</code></td><td>Automatically restart the server after a crash or shutdown</td></tr><tr><td><code>autosave.enabled</code></td><td><code>true</code></td><td>Enable automatic world saves</td></tr><tr><td><code>autosave.saveDelay</code></td><td><code>00:05:00</code> (5 min)</td><td>Interval between automatic saves</td></tr><tr><td><code>autosave.warningDelay</code></td><td><code>00:00:00</code> (0)</td><td>Broadcast a warning this long before each save (0 = no warning)</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="archives-and-backups">Archives and Backups<a href="#archives-and-backups" class="hash-link" aria-label="Direct link to Archives and Backups" title="Direct link to Archives and Backups" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>autoArchive.archiveLocally</code></td><td><code>true</code></td><td>Archive saves to a local directory</td></tr><tr><td><code>autoArchive.archivePath</code></td><td><code>Archives</code></td><td>Directory for compressed save archives</td></tr><tr><td><code>autoArchive.backupPath</code></td><td><code>Backups</code></td><td>Directory for backup copies</td></tr><tr><td><code>autoArchive.compressionLevel</code></td><td><code>3</code></td><td>Zstd compression level (1-19)</td></tr><tr><td><code>autoArchive.enableArchivePruning</code></td><td><code>true</code></td><td>Automatically prune old archives based on retention policy</td></tr><tr><td><code>autoArchive.verifyArchives</code></td><td><code>true</code></td><td>Verify archive integrity after creation</td></tr><tr><td><code>autoArchive.retryCount</code></td><td><code>3</code></td><td>Number of retries on archive failure</td></tr><tr><td><code>autoArchive.retryDelayMs</code></td><td><code>500</code></td><td>Delay between retries (ms)</td></tr><tr><td><code>autoArchive.backupMaxAge</code></td><td><code>30</code></td><td>Maximum age of backup files in days</td></tr><tr><td><code>autoArchive.hourlyRetention</code></td><td><code>24</code></td><td>Number of hourly archives to keep</td></tr><tr><td><code>autoArchive.dailyRetention</code></td><td><code>30</code></td><td>Number of daily archives to keep</td></tr><tr><td><code>autoArchive.monthlyRetention</code></td><td><code>12</code></td><td>Number of monthly archives to keep</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="crash-guard">Crash Guard<a href="#crash-guard" class="hash-link" aria-label="Direct link to Crash Guard" title="Direct link to Crash Guard" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>crashGuard.enabled</code></td><td><code>true</code></td><td>Enable the crash guard system</td></tr><tr><td><code>crashGuard.saveBackup</code></td><td><code>true</code></td><td>Save a backup on crash</td></tr><tr><td><code>crashGuard.restartServer</code></td><td><code>true</code></td><td>Attempt to restart after a crash</td></tr><tr><td><code>crashGuard.generateReport</code></td><td><code>true</code></td><td>Generate a crash report file</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="stats-and-stamina">Stats and Stamina<a href="#stats-and-stamina" class="hash-link" aria-label="Direct link to Stats and Stamina" title="Direct link to Stats and Stamina" translate="no"></a></h3>
<p><strong>Stat Gain:</strong></p>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>stats.statMax</code></td><td><code>Core.LBR ? 125 : 100</code></td><td>Maximum value for a single stat</td></tr><tr><td><code>stats.gainChanceMultiplier</code></td><td><code>1.0</code></td><td>Multiplier for stat gain chance</td></tr><tr><td><code>stats.primaryStatGainChance</code></td><td><code>0.75</code></td><td>Chance to gain in the primary stat</td></tr><tr><td><code>stats.gainDelay</code></td><td><code>Core.ML ? 0.05m : 10m</code></td><td>Cooldown between stat gain checks</td></tr><tr><td><code>stats.petGainDelay</code></td><td><code>5m</code></td><td>Cooldown between pet stat gain checks</td></tr><tr><td><code>stats.usePub45StatGain</code></td><td><code>Core.ML</code></td><td>Use Publish 45 stat gain system</td></tr></tbody></table>
<p><strong>Stamina System:</strong></p>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>stamina.cannotRunWhenFatigued</code></td><td><code>!Core.AOS</code></td><td>Prevent running at zero stamina</td></tr><tr><td><code>stamina.cannotWalkWhenFatigued</code></td><td><code>false</code></td><td>Prevent walking at zero stamina</td></tr><tr><td><code>stamina.stonesPerOverweightLoss</code></td><td><code>25</code></td><td>Stones of weight per stamina loss tick</td></tr><tr><td><code>stamina.stonesOverweightAllowance</code></td><td><code>4</code></td><td>Extra stones allowed before overweight penalty</td></tr><tr><td><code>stamina.baseOverweightLoss</code></td><td><code>5</code></td><td>Base stamina loss per overweight tick</td></tr><tr><td><code>stamina.additionalLossWhenBelow</code></td><td><code>0.10</code></td><td>Extra loss rate when stamina is below this fraction</td></tr><tr><td><code>stamina.enableMountStamina</code></td><td><code>true</code></td><td>Enable stamina drain while mounted</td></tr><tr><td><code>stamina.useMountStaminaOnlyWhenOverloaded</code></td><td><code>Core.SA</code></td><td>Only drain mount stamina when overloaded</td></tr><tr><td><code>stamina.globalEtherealMountStamina</code></td><td><code>Core.ML</code></td><td>Apply stamina drain to ethereal mounts</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="combat-and-systems">Combat and Systems<a href="#combat-and-systems" class="hash-link" aria-label="Direct link to Combat and Systems" title="Direct link to Combat and Systems" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>melee.enableInstaHit</code></td><td><code>!Core.UOR</code></td><td>Enable instant first melee hit on target switch</td></tr><tr><td><code>spellCasting.disableCastParalyze</code></td><td><code>true</code></td><td>Prevent casting while paralyzed</td></tr><tr><td><code>actionDelay</code></td><td><code>Core.AOS ? 1000 : 500</code></td><td>Global action delay in milliseconds</td></tr><tr><td><code>visibleDamage</code></td><td><code>Core.AOS</code></td><td>Show damage numbers above targets</td></tr><tr><td><code>insurance.enable</code></td><td><code>Core.AOS</code></td><td>Enable the item insurance system</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="player-systems">Player Systems<a href="#player-systems" class="hash-link" aria-label="Direct link to Player Systems" title="Direct link to Player Systems" translate="no"></a></h3>
<p><strong>Murder System:</strong></p>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>murderSystem.shortTermMurderDuration</code></td><td><code>8h</code></td><td>Duration of a short-term murder count</td></tr><tr><td><code>murderSystem.longTermMurderDuration</code></td><td><code>40h</code></td><td>Duration of a long-term murder count</td></tr><tr><td><code>murderSystem.bountiesEnabled</code></td><td><code>!Core.LBR</code></td><td>Enable the bounty system</td></tr><tr><td><code>murderSystem.recentlyReportedDelay</code></td><td><code>10m</code></td><td>Cooldown before a victim can report the same murderer</td></tr><tr><td><code>murderSystem.bountyExpiry</code></td><td><code>14d</code></td><td>Time before an uncollected bounty expires</td></tr></tbody></table>
<p><strong>Stealing:</strong></p>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>stealing.classicMode</code></td><td><code>!Core.AOS</code></td><td>Use classic (pre-AOS) stealing mechanics</td></tr><tr><td><code>stealing.suspendOnMurder</code></td><td><code>!Core.AOS</code></td><td>Suspend stealing perma-flag on murder</td></tr><tr><td><code>stealing.canStealContainers</code></td><td><code>!Core.AOS</code></td><td>Allow stealing entire containers</td></tr><tr><td><code>stealing.maxWeightToSteal</code></td><td><code>10</code></td><td>Maximum weight of an item that can be stolen (stones)</td></tr></tbody></table>
<p><strong>Taming:</strong></p>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>taming.enableBonding</code></td><td><code>Core.LBR</code></td><td>Enable pet bonding</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="game-systems">Game Systems<a href="#game-systems" class="hash-link" aria-label="Direct link to Game Systems" title="Direct link to Game Systems" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>opl.enable</code></td><td><code>Core.AOS</code></td><td>Enable Object Property Lists (item tooltips)</td></tr><tr><td><code>opl.enableForVendorBuy</code></td><td><code>true</code></td><td>Show property lists in vendor buy menus</td></tr><tr><td><code>vendor.isInvulnerable</code></td><td><code>Core.LBR</code></td><td>Make NPC vendors invulnerable</td></tr><tr><td><code>guards.instantKill</code></td><td><code>true</code></td><td>Guards instantly kill criminals (vs. fighting them)</td></tr><tr><td><code>factions.enabled</code></td><td><code>false</code></td><td>Enable the factions system</td></tr><tr><td><code>ethics.enable</code></td><td><code>false</code></td><td>Enable the ethics (Hero/Evil) system</td></tr><tr><td><code>questSystem.enableMLQuests</code></td><td><code>Core.ML</code></td><td>Enable Mondain&#x27;s Legacy quest system</td></tr><tr><td><code>vetRewards.enable</code></td><td><code>true</code></td><td>Enable veteran rewards</td></tr><tr><td><code>vetRewards.skillCapRewards</code></td><td><code>true</code></td><td>Enable skill cap increase rewards</td></tr><tr><td><code>vetRewards.rewardInterval</code></td><td><code>30d</code></td><td>Time between reward tiers</td></tr><tr><td><code>testCenter.enable</code></td><td><code>false</code></td><td>Enable test center mode (free skills, items, etc.)</td></tr><tr><td><code>chat.enabled</code></td><td><code>false</code></td><td>Enable the built-in chat system</td></tr><tr><td><code>buffIcons.enable</code></td><td><code>Core.ML</code></td><td>Enable buff/debuff icons on the client UI</td></tr><tr><td><code>houseDecay.enable</code></td><td><code>true</code></td><td>Enable house decay over time</td></tr><tr><td><code>pathfinding.enable</code></td><td><code>true</code></td><td>Enable NPC pathfinding</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="network">Network<a href="#network" class="hash-link" aria-label="Direct link to Network" title="Direct link to Network" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>pingServer.enabled</code></td><td><code>true</code></td><td>Enable the UDP ping server (used by server browsers)</td></tr><tr><td><code>pingServer.port</code></td><td><code>12000</code></td><td>UDP port for the ping server</td></tr><tr><td><code>pingServer.maxConnections</code></td><td><code>2048</code></td><td>Maximum queued ping connections</td></tr><tr><td><code>network.encryptionMode</code></td><td><code>Both</code></td><td>Encryption mode: <code>None</code>, <code>Login</code>, <code>Game</code>, or <code>Both</code></td></tr><tr><td><code>network.encryptionDebug</code></td><td><code>false</code></td><td>Enable debug logging for encryption negotiation</td></tr><tr><td><code>netstate.packetLoggingPath</code></td><td><code>Packets</code></td><td>Directory for per-client packet logs</td></tr><tr><td><code>uogateway.enabled</code></td><td><code>true</code></td><td>Enable the UO Gateway protocol</td></tr><tr><td><code>assistants.enableNegotiation</code></td><td><code>false</code></td><td>Enable Razor-style assistant protocol negotiation</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="server-listing">Server Listing<a href="#server-listing" class="hash-link" aria-label="Direct link to Server Listing" title="Direct link to Server Listing" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>serverListing.serverName</code></td><td><code>ModernUO</code></td><td>Server name shown in the server list</td></tr><tr><td><code>serverListing.address</code></td><td><code>null</code></td><td>Public IP address override for the server list</td></tr><tr><td><code>serverListing.autoDetect</code></td><td><code>true</code></td><td>Auto-detect public IP via external service</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="maps-and-client-data">Maps and Client Data<a href="#maps-and-client-data" class="hash-link" aria-label="Direct link to Maps and Client Data" title="Direct link to Maps and Client Data" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>maps.enablePre6000Trammel</code></td><td><code>false</code></td><td>Use pre-client-6000 Trammel map format</td></tr><tr><td><code>maps.enableMapDiffPatches</code></td><td>auto</td><td>Enable map diff patches</td></tr><tr><td><code>maps.enableStaticsDiffPatches</code></td><td>auto</td><td>Enable statics diff patches</td></tr><tr><td><code>maps.enablePostHSMultiComponentFormat</code></td><td>auto</td><td>Use post-High Seas multi component format</td></tr><tr><td><code>expansion.forceOldAnimations</code></td><td><code>false</code></td><td>Force pre-expansion animation set</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="miscellaneous">Miscellaneous<a href="#miscellaneous" class="hash-link" aria-label="Direct link to Miscellaneous" title="Direct link to Miscellaneous" translate="no"></a></h3>
<table><thead><tr><th>Key</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>commandsystem.prefix</code></td><td><code>[</code></td><td>Command prefix character (e.g., <code>[</code> for <code>[command</code>)</td></tr><tr><td><code>profanityProtection.enabled</code></td><td><code>false</code></td><td>Enable profanity filter</td></tr><tr><td><code>profanityProtection.action</code></td><td><code>Disallow</code></td><td>Profanity action: <code>Disallow</code>, <code>Criminal</code>, <code>None</code></td></tr><tr><td><code>system.localTimeZone</code></td><td>system default</td><td>Override the server&#x27;s time zone (IANA or Windows ID)</td></tr><tr><td><code>pages.discordWebhookUrl</code></td><td><code>null</code></td><td>Discord webhook URL for GM page notifications</td></tr><tr><td><code>guildClickMessage</code></td><td><code>!Core.AOS</code></td><td>Show guild abbreviation on single-click</td></tr><tr><td><code>asciiClickMessage</code></td><td><code>!Core.AOS</code></td><td>Use ASCII (not Unicode) for single-click messages</td></tr><tr><td><code>bulletinboards.creationTimeDelay</code></td><td><code>2m</code></td><td>Cooldown between creating bulletin board threads</td></tr><tr><td><code>bulletinboards.expireDuration</code></td><td><code>6h</code></td><td>Time before bulletin board threads expire</td></tr><tr><td><code>bulletinboards.replyDelay</code></td><td><code>30s</code></td><td>Cooldown between bulletin board replies</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-configuration-files">Other Configuration Files<a href="#other-configuration-files" class="hash-link" aria-label="Direct link to Other Configuration Files" title="Direct link to Other Configuration Files" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="expansionjson">expansion.json<a href="#expansionjson" class="hash-link" aria-label="Direct link to expansion.json" title="Direct link to expansion.json" translate="no"></a></h3>
<p>Controls which expansion the server emulates and which maps are active.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;id&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">7</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;name&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Mondain\u0027s Legacy&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;mapSelectionFlags&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Felucca, Trammel, Ilshenar, Malas, Tokuno&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p>The <code>id</code> corresponds to the <code>Expansion</code> enum (0 = None, 1 = T2A, 2 = UOR, 3 = UOTD, 4 = LBR, 5 = AOS, 6 = SE, 7 = ML, 8 = SA, 9 = HS, 10 = TOL, 11 = EJ). The <code>mapSelectionFlags</code> field controls which maps are loaded.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="antimacrojson">antimacro.json<a href="#antimacrojson" class="hash-link" aria-label="Direct link to antimacro.json" title="Direct link to antimacro.json" translate="no"></a></h3>
<p>Configures per-skill anti-macro rules to prevent automated skill gain.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;allowance&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;locationSize&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;enabled&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;skillTriggers&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;Anatomy&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;AnimalLore&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;Blacksmith&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;Magery&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;expire&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;00:05:00&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<table><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><code>allowance</code></td><td>Number of allowed skill uses per location before throttling</td></tr><tr><td><code>locationSize</code></td><td>Tile radius that defines a &quot;location&quot; for anti-macro purposes</td></tr><tr><td><code>enabled</code></td><td>Master toggle for the anti-macro system</td></tr><tr><td><code>skillTriggers</code></td><td>Per-skill toggle (true = anti-macro enforced for this skill)</td></tr><tr><td><code>expire</code></td><td>How long before location-based counters reset</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="email-settingsjson">email-settings.json<a href="#email-settingsjson" class="hash-link" aria-label="Direct link to email-settings.json" title="Direct link to email-settings.json" translate="no"></a></h3>
<p>SMTP configuration for crash reports and support emails. Created with defaults on first launch if not present.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;enabled&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;fromAddress&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;support@example.com&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;fromName&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;ModernUO Team&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;crashAddress&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;crashes@example.com&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;crashName&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Crash Log&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;speechLogPageAddress&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;support@example.com&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;speechLogPageName&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;GM Support Conversation&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;emailServer&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;smtp.gmail.com&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;emailPort&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">465</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;emailUsername&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;support@example.com&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;emailPassword&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;your-app-password&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;emailSendRetryCount&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;emailSendRetryDelay&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Set <code>&quot;enabled&quot;: true</code> and configure your SMTP credentials to receive crash reports by email. For Gmail, use an <a href="https://support.google.com/accounts/answer/185833" target="_blank" rel="noopener noreferrer" class="">App Password</a>.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="server-accessjson">server-access.json<a href="#server-accessjson" class="hash-link" aria-label="Direct link to server-access.json" title="Direct link to server-access.json" translate="no"></a></h3>
<p>Defines protected accounts that cannot be permanently locked out. If a protected account is banned or has its access level lowered, it automatically resets to <code>Owner</code> on the next successful login.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;protectedAccounts&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;admin&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;owner&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Account names are case-insensitive. This is a safety net for server owners -- it ensures you can always regain access to your server even if another admin modifies your account.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="throttlesjson">throttles.json<a href="#throttlesjson" class="hash-link" aria-label="Direct link to throttles.json" title="Direct link to throttles.json" translate="no"></a></h3>
<p>Maps packet IDs to throttle delays in milliseconds. Packets sent faster than the configured delay are dropped for players (staff is exempt).</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;0x03&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">25</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;0x12&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">25</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;0x75&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">500</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;0xAD&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">25</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<table><thead><tr><th>Packet</th><th>Delay</th><th>Purpose</th></tr></thead><tbody><tr><td><code>0x03</code></td><td>25ms</td><td>Speech</td></tr><tr><td><code>0xAD</code></td><td>25ms</td><td>Unicode speech</td></tr><tr><td><code>0x12</code></td><td>25ms</td><td>Text commands</td></tr><tr><td><code>0x75</code></td><td>500ms</td><td>Rename request</td></tr></tbody></table>
<p>You can modify throttles at runtime using the <code>[SetThrottle</code> and <code>[GetThrottle</code> admin commands.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-configuration">Custom Configuration<a href="#custom-configuration" class="hash-link" aria-label="Direct link to Custom Configuration" title="Direct link to Custom Configuration" translate="no"></a></h2>
<p>Developers can create custom JSON configuration files using the <code>JsonConfig</code> utility:</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token class-name keyword" style="color:rgb(189, 147, 249);font-style:italic">var</span><span class="token plain"> mySettings </span><span class="token operator">=</span><span class="token plain"> JsonConfig</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token generic-method function" style="color:rgb(80, 250, 123)">Deserialize</span><span class="token generic-method generic class-name punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token generic-method generic class-name">MySettings</span><span class="token generic-method generic class-name punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Combine</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Core</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">BaseDirectory</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Configuration/my-settings.json&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<p>Files are read from the <code>Configuration/</code> directory and support comments, trailing commas, and all standard JSON converters (enums, TimeSpan, IPEndPoint, etc.) automatically.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href="https://github.com/modernuo/ModernUO/tree/main/website/content/getting-started/configuration.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/getting-started/starting"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Starting the Server</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/development/items-and-mobiles"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Items &amp; Mobiles</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuration-files" class="table-of-contents__link toc-highlight">Configuration Files</a></li><li><a href="#modernuojson-structure" class="table-of-contents__link toc-highlight">modernuo.json Structure</a></li><li><a href="#feature-flags" class="table-of-contents__link toc-highlight">Feature Flags</a><ul><li><a href="#built-in-flags" class="table-of-contents__link toc-highlight">Built-in Flags</a></li><li><a href="#additional-blocking" class="table-of-contents__link toc-highlight">Additional Blocking</a></li></ul></li><li><a href="#settings-reference" class="table-of-contents__link toc-highlight">Settings Reference</a><ul><li><a href="#movement" class="table-of-contents__link toc-highlight">Movement</a></li><li><a href="#movement-throttling" class="table-of-contents__link toc-highlight">Movement Throttling</a></li><li><a href="#client-verification" class="table-of-contents__link toc-highlight">Client Verification</a></li><li><a href="#accounts-and-security" class="table-of-contents__link toc-highlight">Accounts and Security</a></li><li><a href="#world-saves" class="table-of-contents__link toc-highlight">World Saves</a></li><li><a href="#archives-and-backups" class="table-of-contents__link toc-highlight">Archives and Backups</a></li><li><a href="#crash-guard" class="table-of-contents__link toc-highlight">Crash Guard</a></li><li><a href="#stats-and-stamina" class="table-of-contents__link toc-highlight">Stats and Stamina</a></li><li><a href="#combat-and-systems" class="table-of-contents__link toc-highlight">Combat and Systems</a></li><li><a href="#player-systems" class="table-of-contents__link toc-highlight">Player Systems</a></li><li><a href="#game-systems" class="table-of-contents__link toc-highlight">Game Systems</a></li><li><a href="#network" class="table-of-contents__link toc-highlight">Network</a></li><li><a href="#server-listing" class="table-of-contents__link toc-highlight">Server Listing</a></li><li><a href="#maps-and-client-data" class="table-of-contents__link toc-highlight">Maps and Client Data</a></li><li><a href="#miscellaneous" class="table-of-contents__link toc-highlight">Miscellaneous</a></li></ul></li><li><a href="#other-configuration-files" class="table-of-contents__link toc-highlight">Other Configuration Files</a><ul><li><a href="#expansionjson" class="table-of-contents__link toc-highlight">expansion.json</a></li><li><a href="#antimacrojson" class="table-of-contents__link toc-highlight">antimacro.json</a></li><li><a href="#email-settingsjson" class="table-of-contents__link toc-highlight">email-settings.json</a></li><li><a href="#server-accessjson" class="table-of-contents__link toc-highlight">server-access.json</a></li><li><a href="#throttlesjson" class="table-of-contents__link toc-highlight">throttles.json</a></li></ul></li><li><a href="#custom-configuration" class="table-of-contents__link toc-highlight">Custom Configuration</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer_xBL4"><div class="container"><div class="content_oHCg"><div class="docs_gTOg"><h4 class="heading_oLx1">Documentation</h4><ul class="linkList_QvGs"><li><a class="docLink_M4Bb" href="/docs/getting-started/installation">Get Started</a></li><li><a class="docLink_M4Bb" href="/docs/getting-started/configuration">Configuration</a></li><li><a class="docLink_M4Bb" href="/docs/development/items-and-mobiles">Content Development</a></li><li><a href="/commands.html" class="docLink_M4Bb">Commands</a></li><li><a href="/packets.html" class="docLink_M4Bb">Packets</a></li></ul></div><div class="social_uOzn"><h4 class="heading_oLx1">Community</h4><div class="socialButtons_F2CP"><a href="https://github.com/modernuo/ModernUO" target="_blank" rel="noopener noreferrer" class="socialLink_S6Im"><span class="icon_VBv9"><svg viewBox="0 0 24 24" fill="currentColor" width="16" height="16"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></span><span>GitHub</span></a><a href="https://muo.gg/discord" target="_blank" rel="noopener noreferrer" class="socialLink_S6Im"><span class="icon_VBv9"><svg viewBox="0 0 24 24" fill="currentColor" width="16" height="16"><path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.947 2.418-2.157 2.418z"></path></svg></span><span>Discord</span></a><a href="https://muo.gg/reddit" target="_blank" rel="noopener noreferrer" class="socialLink_S6Im"><span class="icon_VBv9"><svg viewBox="0 0 24 24" fill="currentColor" width="16" height="16"><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z"></path></svg></span><span>Reddit</span></a><a href="https://github.com/sponsors/modernuo" target="_blank" rel="noopener noreferrer" class="socialLink_S6Im"><span class="icon_VBv9"><svg viewBox="0 0 24 24" fill="currentColor" width="16" height="16"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"></path></svg></span><span>Sponsor</span></a></div></div></div><div class="bottom_T_7l"><span>Copyright <!-- -->2026<!-- --> ModernUO Development Team</span></div></div></footer></div>
</body>
</html>