118 lines
No EOL
82 KiB
HTML
118 lines
No EOL
82 KiB
HTML
<!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&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 & Mobiles" class="linkLabel_WmDU">Items & 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 & Targeting" class="linkLabel_WmDU">Commands & 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 & Expansions" class="linkLabel_WmDU">Era & 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">"assemblyDirectories"</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)">"./Assemblies"</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">"dataDirectories"</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)">"/path/to/uo/game/files"</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">"listeners"</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)">"0.0.0.0:2593"</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">"settings"</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">"accountHandler.maxAccountsPerIP"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1"</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">"autosave.enabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"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">"autosave.saveDelay"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"00:05:00"</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'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'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">"id"</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">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Mondain\u0027s Legacy"</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">"mapSelectionFlags"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Felucca, Trammel, Ilshenar, Malas, Tokuno"</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">"allowance"</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">"locationSize"</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">"enabled"</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">"skillTriggers"</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">"Anatomy"</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">"AnimalLore"</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">"Blacksmith"</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">"Magery"</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">"expire"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"00:05:00"</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 "location" 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">"enabled"</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">"fromAddress"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"support@example.com"</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">"fromName"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ModernUO Team"</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">"crashAddress"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"crashes@example.com"</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">"crashName"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Crash Log"</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">"speechLogPageAddress"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"support@example.com"</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">"speechLogPageName"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"GM Support Conversation"</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">"emailServer"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"smtp.gmail.com"</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">"emailPort"</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">"emailUsername"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"support@example.com"</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">"emailPassword"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"your-app-password"</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">"emailSendRetryCount"</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">"emailSendRetryDelay"</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>"enabled": 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">"protectedAccounts"</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)">"admin"</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)">"owner"</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">"0x03"</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">"0x12"</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">"0x75"</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">"0xAD"</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)"><</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)">></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)">"Configuration/my-settings.json"</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 & 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> |