Last Updated: 18. October, 2021

Written for UOX3 Version: v0.99.4y

- About UOX3
- Installation and Setup
- First Five Minutes
- Additional UOX3 Info
- Feature Documentation
- Scripting - DFN System
- Scripting - JS Engine
- Resources and Links
- History and Credits

- # About UOX3

- About this Document

  This document aims to gather all documentation related to UOX3 in one place, and you'll find a version-specific copy of it bundled along with any given version of the UOX3 all-in-one download.

  The latest up-to-date version can always be found at https://www.uox3.org/docs/index.html!

  Latest Documentation Updates

  #### October 18th, 2021

  - Updated UOX.INI Settings section (CONSOLELOG, NETWORKLOG, SPEECHLOG, BANKBUYTHRESHOLD, NPCMOUNTEDWALKINGSPEED, NPCMOUNTEDFLEEINGSPEED, NPCMOUNTEDRUNNINGSPEED, SPAWNREGIONSFACETS)
  - Updated Skill and Stat Gain section with details on SKILLDELAY tag, and the role that the STR, DEX and INT tags play
  - Added a simple filter function to make it easier to find stuff in the docs

  #### September 24th, 2021

  - Updated UOX.INI Settings section with latest additions and changes (unicode messages, context menus, system message hue, client network budget, stats affect skills, resource areas, archery hit bonus, archery shoot delay)

  #### August 27th, 2021

  - Added Character Priv Flags feature info with details on character privilege flags, how they work, and how to set/modify them

  #### August 1st, 2021

  - Updated UOX.INI Settings section with latest additions (pets and followers, fishing resource type)

  #### July 28th, 2021

  - Updated Dictionaries feature info with details on UOX3's multilingual support

  #### July 6th, 2021

  - Updated Race System feature info with complete details on how the race system in UOX3 is/can be setup
  - Updated DFN Tag Overview with full list of tags supported by races.dfn
  - Updated Spawn Objects feature info with details and examples of how to setup the different types of spawn objects

  #### June 30th, 2021

  - Added Crafting System feature info with details on how the crafting system in UOX3 is setup, as well as how the "rank system" extension of the crafting system works

  #### June 22nd, 2021

  - Updated NPC Escort Quests feature info with details on how NPC Escort Quests are setup and used

  #### June 15th, 2021

  - Updated Race System feature info with details on how to use [COMBAT MODS] with races

  #### June 13th, 2021

  - Updated Installation and Setup section with up-to-date information on getting started with UOX3
  - Updated Decorating and Populating your UOX3 Shard with information on new welcome-gump for admins and introduction to 'decorate command
  - Added details about 'decorate command to the Command List
  - Added details about World Templates under the Feature Documentation section

  #### April 25th, 2021

  - Updated Colours and Colour Chart to include information about partial hues and ethereal hues.
  - Updated details for set command in Command List to include account properties that can be set
  - Updated UOX.INI Settings section with latest additions (JSENGINESIZE)

  #### April 8th, 2021

  - Updated UOX.INI Settings with details on NPCFLAGUPDATETIMER setting
  - Added Colour Chart to Additional UOX3 Info section
  - Documentation now makes use of Prism for syntax highlighting

  #### March 26th, 2021

  - Updated UOX.INI Settings with details on ALCHEMYBONUSENABLED and ALCHEMYBONUSMODIFIER settings
  - Added first iteration of Spawn Objects feature details

  #### March 23rd, 2021

  - Updated list of Tiledata Flags under Maps, Statics and Tiledata to include flags added in High Seas expansion

  #### March 22nd, 2021

  - Updated JSE File, Object and Type-associations section with details about how to register a "packet-hook" script to handle specific incoming network packets via the JS engine
  - Added additional links in Resources and Links section, under Third Party Tools and Other UO Emulator Resources
  - Updated UOX.INI Settings section with latest additions

  #### March 19th, 2021

  - Added feature documentation details on NPC Loot

  #### November 13th, 2020

  - Added dos2unix instructions for Linux/MacOS users downloading default worldfiles/spawnfiles

  #### November 7th, 2020

  - Added complete list of item types
  - Added complete list of item layers
  - Added feature documentation details for Monster and Race Gates

  #### September 26th, 2020

  - Added section on DFN tags for Character, Item, Region, SpawnRegion and Weather DFNs.
  - Added Feature documentation for Mining and customizable ores
  - Added More details in feature documentation for Spawn Regions
  - Updated feature documentation for Dictionaries
  - Added more details in UOX3 history section

  #### September 7th, 2020

  - Initial revamp of documentation
- Introduction to UOX3

  UOX3 - or Ultima Offline eXperiment 3 - is an open-source server emulator for Ultima Online that allows you to run your own private (or public) UO server where you are in control of what rules apply, what features are available and what type of players will inhibit Britannia.

  ### Getting Started

  If you want to dive right in and get started with UOX3, hop on over to the Installation and Setup section.

  ### UOX3 History and Changelog

  To see what's new in the latest stable release of UOX3, or to do an in-depth dive into the history of the UOX3 project itself, check out the History and Credits section of this document.

- Feature Highlights
  Core UOX3 Features

  The core features listed below are the heart and soul of UOX3, and are what helps UOX3 stand out in the UO server emulator space:

  - Open Source (C/C++) - You can download, experiment with and make changes to the source code to fit the particular needs of your UOX3 shard, or branch off to create a spin-off emulator that can be successful in its own right (see UO Emulator timeline for a history of such spin-offs).
  - Cross-Platform Support - UOX3 strives to maintain cross-platform support, so it can run on a variety of Windows, Linux and macOS versions and configurations (including 64-bit ones).
  - JavaScript-based Scripting Engine - UOX3's JS-based scripting engine is a powerful tool that allows anyone with a rudimentary understanding of JavaScript to create new features or enhance existing ones, all without having to dig deep into the C/C++ core of UOX3. Also includes a "packet hook" system that allows intercepting network packets sent by connected clients, and sending custom network packets in response.
  JS example

  Script that lets players tip cows over by double-clicking them:

      function onCharDoubleClick( pUser, targChar ) // DoubleClick Event
      {
      	// Generate random number from 0 to 100
      	var rndValue = RandomNumber( 0, 100 );

      	// If random number was lower than 5, tip the cow!
      	if( rndValue < 5 )
      	{
      		targChar.DoAction( 8 ); // Play falling over animation on cow
      		targChar.SoundEffect( 0x78, true ); // Cow goes moo!
      	}
      }

  - DFN Files - The definition files, written in flat text files, act as easily editable blueprints and templates for items, NPCs, regions, skills, player races and more.
  DFN example

  Definition for a bag full of reagents, added in-game using the GM command 'add item bagofreagents:

      [bagofreagents]
      {
      get=base_item
      name=bag
      id=0x0e76
      weight=100
      weightmax=40000
      value=7 3
      type=1
      restock=10
      decay=1
      good=5
      packitem=0x0f7a,30
      packitem=0x0f7b,30
      packitem=0x0f84,30
      packitem=0x0f85,30
      packitem=0x0f86,30
      packitem=0x0f88,30
      packitem=0x0f8c,30
      packitem=0x0f8d,30
      }

  - Dynamic Reloading of Scripts - Any scripts, definition files and ini files used by UOX3 can be reloaded on the fly - in just a few seconds - while the server is already running. This makes it easy for shard admins and developers to quickly iterate on changes and additions, without having to restart the server from scratch and reconnect the client to see each change.
  - Custom Object Tags - Custom string/int tags can be added to any character or item (including multis) via JS scripts or Item/NPC definitions - either of which can be reloaded on the fly if needed. No need to ask developers to add a custom tag in the source... just add it yourself! No serialization headaches required.
  - UO Client Support - UOX3 supports a wide range of UO client versions, all the way from the 4.x versions originally introduced with the Age of Shadows expansion in 2003, to the most recent 7.0.x series available today.
  - Multi-Language Support - UOX3 comes with a custom dictionary system that allows for sending script and system messages to connected clients in the client's default language, or to specify a default language for the server which is used for all connected clients regardless of their language settings. Languages supported by server (translation quality may vary):
    English (Default), Czech, French, German, Italian, Portuguese, Spanish
  - Extensive Log System - UOX3 comes with an extensive log system that tracks server errors, warnings, network packets sent and received for each client, commands used, spells cast, combat events, player speech and more.
  Customization Options

  UOX3 has many settings and options that can be tweaked via the main configuration file, uox.ini, as well as in individual regions of the world. More in-depth tweaks are also possible by editing various JS files for skills and items:

  - Client Blocking - Mix and match which client versions to allow on your shard. Players using unsupported clients will be blocked and/or disconnected shortly after joining the shard.
  - Feature Negotiation - UOX3 supports negotiating features with assistant tools that support this, like Razor. Enable or disable various assistant functions like auto-remounting, weather filter and more.
  - ClassicUO Map Tracker - If using the ClassicUO client's World Map, guild and party members will show up on the map if this option is enabled.
  - Skill and Stat-caps - Choose skill and stat-caps for all players via two simple settings.
  - Rogue Skills - Adjust the amount of steps players can take while stealthing, make snooping a crime - or legalize it, disable hostile skills in protected regions, or disable rogue skills altogether.
  - Timers and Effects - Easily tweak timers for decay, weather updates, shop restock, object use delay, idle disconnect, mana regen and more. Fine-tune NPC AI reaction time and the movement speed of NPCs and Boats.
  - Automatic Account Creation - Enable automatic account creation for anyone that attempts to log in, or keep control of who can join your shard by adding accounts manually.
  - Creature Control - Customize which SFX and animations are used for each particular creature, and decide which ones walk on dry land, which ones swim in the sea and which ones fly in the air.
  - Client/Server Features - Full control over which features get enabled in client and on server.
  - Spell Tweaks - Want to customize the delay of the Explosion spell, the damage of the Flamestrike spell, the FX of the Magic Missile spell or the SFX of the Teleport spell? No problem.
  - Combat Tweaks - Cap the max range of archery weapons, turn off damage numbers in combat, give animals a chance to attack players or to flee once their health reaches the threshold you set.
  - Maps, maps, maps - Support for pre-ML or post-ML map sizes (or custom sizes, if client allows), and for reading map data in either .mul or .uop formats.
  - Housing - Track house ownership per character or per account, specify how many houses players can own/co-own, enable/disable item decay in houses, customize lockdowns, secure containers, vendors and more per house type.
  Custom Gameplay Features

  UOX3 comes pre-packed with a host of custom (and optional) features that can be customized and tweaked by shard admins:

  - Instances - The Instances system can be used to allow players (and other objects) to co-exist at the same coordinates on the same map, without seeing each other, interfering with each other or be blocked by each other. Can be used to create systems for instanced dungeons, housing zones, static housing, personalized quest-zones, etc.
  - Region System & Player-run Towns - Region system with built-in support for player-run towns.
  - Regional Weather System - A region-specific weather system allows each region of the game world to have its own unique weather setup, with temperature swings, heat waves, cold snaps, rain, snow and wind - all of which ties into a race system where specific races can have weaknesses or strengths tied to specific weather or temperatures.
  - Regional Spawning System - The regional spawning system allows UOX3 shards to spawn an enormous amount of NPCs and items in the game world without significantly increased world-save and load times, since the objects spawned through this system are only kept in memory for as long as the server is running, and will respawn upon startup.
  - Advanced Trade System - The advanced trade system in UOX3 can be used to setup dynamic prices for goods with NPC vendors across the game world, with prices fluctuating based on the amount of items sold to or bought from players in each region.
  - Customizable Ore System - Customize the types of ore available in your world, where to find them and how hard they are to dig out of the ground.
  - Rank and Quality Crafting System - Custom rank system for crafting skills allow for variable stats and quality of crafted items.
  - Race System - The race system in UOX3 is an extensive and customizable system that can be applied to both players and NPCs. Through this system, races can be setup as allies or enemies, can be given skill bonuses or penalties, have different skill and stat caps, can take extra damage from specific weapons (undead race vs silver weapons, for instance), and more.
  - Advancement Gates - Shard admins can setup "advancement gates" which sets up players who step through them with specific skills, stats and equipment, and can be used to give players a head start or to setup predefined "classes" beyond what the UO client's character creation options allow for.
  - Persecution - Getting killed on an UOX3 shard is not the end. Ghosts can fight back! By entering combat mode, ghosts can cause trouble for their killers by draining their mana at opportune moments!
  - Ambient Footstep Sounds - Ever noticed how in regular UO, the footsteps of your character always sound the same, no matter what kind of surface you walk on? Enable ambient footstep sounds in UOX3, and you'll be walking on wood, gravel, stone and swamp in no time!
  UO-Specific Gameplay Features

  UOX3 also supports various features from regular UO:

  - Combat - Combat system with rules that align closely with official UO around the time of Publish 15, just before the release of the Age of Shadows expansion. Ruleset can be modified and/or extended to support specific preferences.
  - Crafting - Prefer baking bread over hacking and slashing? Try your hand at Alchemy, Bowcraft, Carpentry, Cartography, Inscription, Smithing, Tailoring or Tinkering!
  - Gathering - Mine your way to an ingot empire, introduce some trees to your friend - the axe, or relax with some casual fishing.
  - Persistent Housing - Classic persistent housing system with lockdowns, secure containers, co-owners, friendlists, public/private houses.
  - Party System - Party up with friends and share a private, server-wide chat.
  - Guildstones - Guild system that relies on classic guildstones that can be placed in player's houses.
  - Player Vendors - Set up a trade empire across Britannia with a little help from player vendors!
- UOX3 Support and Community

  If at any point during your adventures with UOX3 you feel you could use someone to talk to, whether to help you resolve an issue you've encountered or just to have someone to share your journey with, feel free to join and post at the community forums at UOX3.org, or hop onto the UOX3 Discord server if you'd rather have a more direct line of communication with fellow UOX3 users and developers. Or do both!

- UOX3 Story

  "Story? You mean UOX3 has LORE?"

  Yep! As the only UO Server Emulator, UOX3 comes with its own background story, originally written by Cironian back in 1997/1998. Check it out below!

  Chapter One - Death

  You knew that the world was ending right now before your eyes, and there was nothing you could do about it anymore. Lord British was dead and the Guardians demon legions were swarming all through the once proud city of Britain. Bodies were lying all around the streets, thieves next to nobles and the former castle guards.

  That body which you used to call your own is still bleeding at your slightly transparent feet but it is obviously too late for any kind of medical treatment. Your spells have allowed you to take two of those red abnormities with you, but when the Shadowlord Astaroth approached you, you knew that your last minute has come. You stood paralysed as his dark finger stretched out to your chest and when it touched you, you had left your body even before it hit the ground. You notice that some of those who are falling to the assault of the demons don't even leave a spirit behind anymore; it seems like after his death the magic that Lord British gave to his citizens to survive past their own death is beginning to fade.

  Having wandered through the bloody streets for some time you see that there is still some light spilling through the windows of one of the nearby houses. You glance up to the sign above the door and note the symbol of the virtues, the ankh, painted onto it. Even though you ghostly state denies all colors of the world reach you, somehow you still recognize the golden color of the symbol. After thinking for only a moment you reach for the doorknob, only to see your hand go right through it. "Oh, I forgot...", you smile to yourself, these words being only a whisper in the storm of the fighting to those still standing locked in combat with the demonic hordes.

  Despite your current disembodied state you take a deep breath and then step right through the closed door.

  Chapter Two - End of the world

  Inside the building you can make out a few people in grey robes, sitting around a candle like it could protect them from the Guardians assault outside. One of the people seems to note your presense and turns around:

  "Ah, another lost soul that has found the way here. With the forces of chaos drawing into this realm, my healing powers are fading from minute to minute, but I might try to give you a new body if you assist me". The healer is beginning to make arcane gestures and you feel a wave of restoring energy rush through your astral body. With the rest of your powers you finally succeed to become physical again.

  "This is it", the healer says, "my powers are now completely gone". You place your weak body among the others and listen to the screams outside, although those are becoming less and less by now.

  You know that this new life will certainly only last for a couple of minutes, as the magic forces which bind this world together are beginning to fail, with obvious consequences: Lightnings are striking down from the sky by the dozen, giant earthquakes are threatening to tear the land apart and you can almost feel the pure evil power of the Guardian condensing in the air, converting this world to - what? You remember hearing one of the court mages whisper with his dying breath that the Guardian would use conquered worlds to create the Shadowlords. If that is true, then this world is really lost.

  You glance out through the window and see one of the black moongates open with more demons stepping out of it. A thought crosses your mind: There can be no place worse than this one, so it might be worth the try. You tell the others that you intend to go through one of those gates to survive the end of this world and most of them agree to try it. You walk over to the door and silently unlock it and open it just so much that you can get a look at a part of the road outside. What you see is terrible. Sweet Dreams Inn is already completely burned down and the ground seems to be painted with blood.

  "Now!", you scream as you see another of the black gates open just a few steps away from the door. You hit the door open and start to run, but just a second before you would have reached the gate a demon steps out of it, looking down at you in a quite angry way. You signal the other to run into the gate while you divert the creature, even though you have no idea on how to do that. As it rushes toward you, you notice one of Lord Britishs personal castle guards lying on the ground here. Still in his hand you see one of the famous order shields, magically treated by the King himself. You reach for it and with all your strength hold it in front of you as the demon brings his fist down on you.

  The shield is shattered in two under the might of the blow, but by that the magic still inherent in it is released in a brilliant flash of light; not enough to kill the demon, but enough to render it helpless for a moment and you do not need any more time to run between its legs and towards the black gate. Knowing that this world could die any second now you jump through the gate...

  You find yourself flying through some sort of dark tunnel; at the end of which you see another world. But you can't say that world appears much better to you than the one you just left, because it looks like the homeland of the demons. Thousands of them are waiting at the exit of the gate and it seems like they have already taken care of those that entered the gate before you. You look back over your shoulder at the place you came from and at the same moment that world ends. Suddendly the gate, having lost one of its exits vanishes, leaving you suspended in the Ethereal Void.

  You see millions of stars all around you, except that those are no stars but worlds; just like the one you were born and lived in until this day, and another one of them is now serving the Guardian...

  Chapter Three - The lost splinter

  You awaken. You are lying on a perfectly ordinary bed in an absolutely normal room of an inn. You rise to your feet and look out of the window to see the wonderful town of Britain, still quite unharmed as if that which you remember never happened. You get dressed and walk down the stairs of the inn. The first thing you notice is the lack of people that are usually shoving past each other here. On the street you see that this phenomenon is not limited to the inn, but seems to be present all around Britain.

  You spin around as you notice a movement in the corner of your eye. Your eyes widen as you see Lord Blackthorne himself standing there as if the Guardians attack on Britannia never happened.

  "I guess thou hast questions on your mind", your hear him,"like why thou art here when your memories tell thee that everything must be quite different. The reason for that is that thou art no longer in the world that thou knowest - nor one even like it. As thou possibly knowest, there are thousands of copies of the land called Britannia existing in the shards of Mondains foul gem of immortality. Now, for some reason when the worlds were split from each other, this special world was created without any inhabitants. Now, as the creature calling himself the Guardian conquered other worlds like yours, some people always entered one of the black moongates in the moment of destruction and thus ending up here. Thou mightest call this world the Lost Splinter. Well, I would really like to discuss this matter further with thee, but I am due for a game of chess with Lord British."

  "He lives?", you exclaim. "Well, in fact the two of us ended up here when we were fleeing from the world that later became the Shadowlord Nosfentor." His face turns sad: "How fitting to run away from that world which became the embodiment of cowardice... But now I must hasten to the castle. Feel free to take a look around this world. There are not many people here, but at least the ecology yield more than enough food and resources for us few."

  As you watch the Lord disappear down the street you start to think. At least you would be safe from the Guardian here - for now. You start to walk through an unusually empty Britain; there is so much to learn about this world, so you might as well start right now.

- # Installation and Setup

- UOX3 Quick Start Guide

  Refer to this Quick Start guide to get up and running with UOX3 in just a couple of minutes! If you run into any problems along the way, check the full setup guide below for more detailed instructions with additional information that might help you resolve your issue. Also feel free to jump onto our Discord server or post in the community forums for more hands-on support!

  1. Download the UO Client, and Razor. Run Razor in WinXP SP2/3 Compatibility mode. For Linux/macOS users, find a way to copy the installed UO directory on a Windows machine over to your Linux/macOS one, and then rely on ClassicUO client (also available for Windows-users!) instead of the UO+Razor combination.
  2. Download UOX3 for your platform of choice.
  3. Update SERVERNAME (name of your shard) and optionally EXTERNALIP (your internet IP) in [system] section of UOX.INI. If you just want to connect locally on same computer, leave EXTERNALIP alone
  4. Set client versions allowed on your shard via CLIENTSUPPORT# lines in [clientsupport] section of UOX.INI.
  5. Update DATADIRECTORY path in [directories] section of UOX.INI; point it to UO folder, or folder with UO data files.
  6. Change default username/password for account 0 (admin account) in UOX3/accounts/accounts.adm.
  7. Start UOX3!
  8. Start Razor and use it to load up the UO client (or use ClassicUO), then log in using the new username and password you created for the admin account!

  Assuming the setup process went without a hitch, you can now skip ahead to the section titled Logging In and Creating a Character for a taking your first steps in your UOX3 shard! However, if you ran into any trouble along the way, refer to the full setup guide in the next few sections below!

- Requirements and Recommendations

  ### OS / Platform

  UOX3 comes with cross-platform support for running on a variety of Windows (~Win7 to Win10), Linux and macOS versions, in both 32bit and 64bit.

  ### Hardware

  Default install size for UOX3 alone clocks in at under 8MB, with an additional 400-500 MB being required for data files from Ultima Online. Total size will grow based on amount of content added to shard. Minimum 1+ GB free storage space recommended.

  Default memory usage for an empty shard ranges from 35-50 MB, but will grow based on amount of content added to shard and number of players connected at any given time. Minimum 1+ GB RAM recommended.

  ### Ultima Online Client

  It is highly recommended to use the same data files for your UOX3 shard as found in the Ultima Online client you will be connecting to UOX3 with, to minimize the chance of issues related to mismatching files.

  UOX3 currently supports client versions ranging from 4.0.0p to at least 7.0.90.x, and requires the following minimum set of UO data files to run:

  - map0.mul/map0LegacyMUL.uop (depending on client version)
  - staidx0.mul
  - statics0.mul
  - multi.mul / MultiCollection.uop (depending on client version)
  - multi.idx (not needed if using MultiCollection.uop)
  - tiledata.mul

  Additional map and statics data files are optional, and required only if you want the other worlds/facets to be available on your shard.

  Bonus Tip - MUL vs UOP Map Files

  Clients after v7.0.24.2 started using new file format for map files - uop - that previously required conversion to mul format in order to be loaded by UOX3, leading to a recommendation of using a client version earlier than this. However, starting with v0.99.3, UOX3 can now load these uop files directly. No need to convert! If for whatever reason you still want to convert files between the .mul and .uop formats, check out the Additional UOX3 Info > Converting UOP to MUL section!

  It is strongly recommended that you download and install a version of Ultima Online before continuing with the download and setup of UOX3 itself. You can either download the latest available Classic Client from the official UO website, or you can head on over to the community forums to read more about UOX3's compatibility with various UO Client versions.

  While you're at it, go grab the UO:R Community Edition of Razor, a tool you'll need later to remove the encryption from the UO client, allowing it to connect to UOX3 - which only accepts encryption-less connections. Alternatively, you can use ClassicUO - an open source client with many extra bells and whistles.

  ### Linux/macOS Platforms

  While UOX3 supports both Linux and macOS, neither the standard UO client nor Razor run natively on these platforms. As an alternative, have a look at ClassicUO, an open-source, cross-platform client that supports both Linux and macOS (and Windows!), and which does not rely on Razor to work.

- Downloading UOX3

  To get started with UOX3, you have a couple of different options:

  ### 1) Stable All-in-One

  The first, and most straight-forward option is to download the latest stable All-in-One UOX3 package for your platform (Windows/Linux/macOS) from the Downloads page at UOX3.org. It contains all the files you need to get a bare-bones version of UOX3 up and running; a clean slate for you to build on.

  ### 2) Experimental Build

  If it has been some time since the stable All-in-One package was updated, it might be a better approach to try out the "Experimental Build" sometimes posted on the forums at UOX3.org. These versions contain all the latest changes and additions that have been made to UOX3 since the previous stable release, but could also potentially contain additional bugs and errors due to the "cutting edge" nature.

  Note: For either of the two above options, unzip the downloaded file to a folder of your choice, preferably something easy to find and access, like C:\UOX3.

  ### 3) Compile Source Yourself

  The third option, for more advanced users, would be to download the UOX3 source-code directly from GitHub and compile it yourself. If you're interested in the inner workings of UOX3 and/or potentially want to contribute code-wise, or just like to live life on the edge and want to stay up-to-date with the most recent changes at any given point of time, this might be the option for you. See Additional UOX3 Info > Compiling UOX3 Source for further instructions!

- Configuring Your UOX3 Shard

  Assuming you now have a UOX3 folder that contains UOX3.exe (Windows only), uox3 binary (Linux/macOS only), some .ini files and a bunch of folders like accounts, dfndata and js, it's time to dig in and get your hands dirty with some ini editing!

  ### Step 1) Open UOX.INI

  Open UOX.INI from the root UOX3 folder using your favourite text editor (Notepad, Notepad++, Sublime Text, Vim, nano, etc.)

  ### Step 2) Name Your Shard

  Under the [system] section, look for the line similar to SERVERNAME=My UOX3 Shard.

  Replace "My UOX3 Shard" with the name you'd like to use for your UOX3 shard. Keep the name short (preferably 16-20 chars); the longer it is, the less likely it will show up in the UO client's server list without being truncated.

  ### Step 3) Set the IP Address and Port

  By default, UOX3 will work for local connections with no further changes required in this step, i.e. when connecting with UO client on same computer as UOX3, or connecting across a home LAN/WiFi.

  However, if you intend to have your UOX3 shard accessible to other people over the Internet, you need to replace 127.0.0.1 in the line EXTERNALIP=127.0.0.1 with your public Internet IP. An additional step that might be required here, is to configure your Internet router to forward incoming connections to your local computer via a concept called port forwarding (check linked FAQ answer on UOX3 forums for more info).

  Speaking of ports - the ini setting PORT=2593 determines the port UOX3 will be listening for incoming connections on. Usually this can be left as the default value, unless you have specific reasons to use a different port.

  ### Step 4) Limit Allowed Client Versions

  Under the [clientsupport] section, enable or disable specific UO client version ranges to determine which versions of the UO client are allowed to connect to your UOX3 shard. As a general rule, try to keep the allowed ranges as narrow as possible to avoid potential issues with different client versions behaving differently. Any client version you enable here also enable a range of versions up to the version in the next available setting.

  ### Step 5) Set the path to UO files

  Scroll down to the [directories] section of the ini file, and locate this line:

  DATADIRECTORY=C:\Program Files (x86)\Electronic Arts\Ultima Online Classic

  If you're running UOX3 on the same computer as your UO client, point the DATADIRECTORY filepath to the folder where you installed Ultima Online.

  If you're running UOX3 on a computer without the UO client installed, point the DATADIRECTORY filepath to a folder that contains the following data-files, copied from the UO Client:

  List of Required UO Data Files
  - map*.mul / map*LegacyMUL.uop (Depending on client version)
  - mapdif*.mul (Only certain older client versions)
  - multi.idx / MultiCollection.uop (Depending on client version)
  - multi.mul (Not needed if using MultiCollection.uop)
  - stadif*.mul (Only certain older client versions)
  - staidx*.mul
  - statics*.mul
  - tiledata.mul

  NOTE: The * in the above filenames indicate that there's more than one similarly named files, and the different numbers in each filename represents a different world/facet. If you want your shard to support all the available worlds/facets in the client, make sure to copy all of these files. Alternatively, just copy the files with a 0 in the name, if you just want the original UO map and nothing else - although be aware that in this case players will be unable to go to those additional worlds!

  ### Step 6) Setting up the Admin Account

  The final step in the UOX3 setup process is to setup the administrator account for your shard! Save and close UOX.INI, and instead navigate your way to the UOX3/accounts/ folder, where you open accounts.adm in your text editor, before locating this section of the file:

  accounts.adm
  ...

  SECTION ACCOUNT 0
  {
  NAME admin
  PASS admin
  FLAGS 0x8000
  PATH ./accounts/admin/
  TIMEBAN 0x0
  LASTIP 127.0.0.1
  CONTACT unknown
  CHARACTER-1 0xffffffff [UNKNOWN]
  CHARACTER-2 0xffffffff [UNKNOWN]
  CHARACTER-3 0xffffffff [UNKNOWN]
  CHARACTER-4 0xffffffff [UNKNOWN]
  CHARACTER-5 0xffffffff [UNKNOWN]
  CHARACTER-6 0xffffffff [UNKNOWN]
  CHARACTER-7 0xffffffff [UNKNOWN]
  }

  ...

  This is account #0 on your shard, also known as the administrator account. Any character created on this account will automatically be granted all GM and Admin powers. As such, it would be a good idea to change the username and password from the default ADMIN/ADMIN to something more original, creative and most importantly - secure! Note that it can be a good idea to create a second, non-admin account to use for testing purposes, as GM/Admin characters are often not subject to the same gameplay rules as regular players.

  Additional accounts can be created by copying an existing SECTION ACCOUNT # (like the default guest account) and pasting it at the bottom of the file, followed by manually incrementing the account number of the new account to the next available number (1 higher than the previous one), changing the username/password/contact info and ensuring all the character references are set to 0xffffffff [UNKNOWN].

  If you make changes to this file while UOX3 is already running, you will have to reload the accounts from UOX3's console menu.

  Bonus Tips - Additional Account Creation Methods

  Tip #1 - Add accounts via in-game command

  While your UOX3 shard is already running, you can add more accounts via the in-game Admin command 'addaccount. Any accounts added via this command are instantly available for use. Syntax: addaccount [username] [password] [flags]

  Example: 'addaccount guest2 guest2 0x0

  Tip #2 - Add accounts through newaccounts.adm

  Another alternate way of adding new accounts is to edit - or create, if it doesn't already exist, a file called newaccounts.adm in the root accounts folder, and adding one line per account you want to create, matching the following syntax:

  USER=[username],[password],[flags],[email]

  Note that additions to newaccounts.adm only go into effect when the server is restarted.

  Tip #3 - Enable auto-creation of accounts

  Finally, you can enable auto-creation of accounts on login by setting the UOX.INI setting INTERNALACCOUNTCREATION from 0 to 1 and restarting your UOX3 shard (or reloading the INI from the UOX3 console menu). This will automatically create a new account for anyone who attempts to login to your shard with an unrecognized account-name. Beware that this could make it easier for someone to cause trouble for your shard, as even if you ban a problem user's account, they can just create a new account straight away. To solve this issue, you might need to ban them by IP via banlist.ini instead!

  Bonus Tips - UOX3 Directory Structure Overview
  /UOX3/
  | Root folder that contains .exe and .ini files
  |
  |--/accounts/
  | Contains all user account data
  |
  |--/archives/
  | Automatic worldfile backups are stored here
  |
  |--/books/
  | Used to store data about books written by players on the shard
  |
  |--/dfndata/
  | Contains DFN files that define attributes and properties of various aspects of the shard
  |
  |--/dictionaries/
  | Dictionaries with script-and system messages translated into languages supported by the UO client.
  |
  |--/docs/
  | Various documentation related to running an UOX3 shard
  |
  |--/help/
  | Help files accessible via in-game 'help command
  |
  |--/html/
  | Server status pages are saved here, with details about server performance and population
  |
  |--/js/
  | The home of all scripts read by UOX3's JavaScript Engine
  |
  |--/logs/
  | Output folder for various shard log files; error log, combat log, network log, etc
  |
  |--/msgboards/
  | This is where data for posts on in-game bulletin boards is stored
  |
  |--/shared/
  | Where world data about characters, items, time, resource regions etc is stored
  |
  | banlist.ini
  | uox.ini
  | UOX3.exe (Windows only)
  | uox3 (Linux only)
- Decorating and Populating Your UOX3 Shard

  ### Decorating your World with Items

  By default, UOX3 comes as a blank slate - a tabula rasa - on which you can build and craft your own unique UO shard. However, should you wish to get a head-start, you will - on first login with a character on the admin account - get the option to automatically decorate your shard based on some default world templates (based on the older "default UOX3 worldfiles") provided with UOX3, which generates items such as doors, signs, lights and more. For now, these templates cover all the mainland UO towns on the Felucca facet (world 0).

  This option is presented in a gump (UO term for menu) that pops up on login, where you can choose between starting with a blank shard and do your own thing, or to make use of the default UOX3 world templates to generate decorations and provide a starting point for your shard.

  If you don't want to make this choice on your first login, you can always return to the welcome screen using the 'welcome command, or alternatively skip that altogether and rely on the 'decorate load command to get the job done. Either way, any custom content you have added or changes you have made to your shard will not be overwritten.

  For more info on how to actually create a character and login to your shard, check the Logging In and Creating a Character section of the docs.

  ### Populating your World with NPCs

  You can supplement the world decorations from above with a community-made spawn file, which will populate your world with all kinds of NPCs, from animals and monsters to shopkeepers and townfolk. This also covers mainland Britannia on the Felucca facet, as well as the dungeons and various monster camps on that map:

  #### Community-made Spawn.dfn

  Click the Community-made Spawn.dfn link over at the UOX3.org Downloads-page (direct link) to download a zip-file with regional spawns setup to spawn a variety of NPCs across the Felcuca facet (world 0) of your UOX3 shard. Unzip this file into the UOX3/dfndata/spawn/ folder, overwriting any existing (and presumably empty) spawn.dfn file in that folder.

  Linux/MacOS users take note: you might need to run the spawn file through dos2unix to convert the line breaks to the correct format for your platform, or UOX3 might not be able to read them properly. Just run the command "dos2unix *" on the files before copying them into the UOX3/dfndata/spawn directory.

- Starting Up Your UOX3 Shard

  ### Windows

  Navigate to the root of your UOX3 folder, and double-click on UOX3.exe to start UOX3.

  ### Linux/macOS

  Open a new terminal window, navigate to the root of your UOX3 directory, and start UOX3 by entering the following command: ./uox3

  ### Common

  UOX3 should now start up, and a barrage of text should scroll off your screen as UOX3 loads the various UO data files, DFNs and scripts. Barring any errors during this process, the scrolling should come to a halt with the following lines displayed at the bottom:

  | UOX: Startup Complete
  o------------------------------------------------------------------------------o
  | Thread: CheckConsoleThread has started

  If you see these lines, and there were no errors highlighted with a red [failed] during the startup process, your UOX3 shard is now ready to accept its first client connection!

  Bonus Tip - Shutting down UOX3

  Should you ever need to shut down UOX3 for any reason, it's important that you do it correctly to avoid any loss of data. If you simply close UOX3 using the 'x' in the corner of the window, any changes made since the last worldsave will be permanently lost.

  Instead, either use the in-game GM command 'shutdown # (where # is the number of seconds until shutdown), or press * in the UOX3 console to disable safe-mode, followed by either Q or Esc. This will prompt UOX3 to initiate the shutdown process, saving the game world and freeing up used memory.

- Connecting to UOX3

  A couple of things are required to connect and login to your UOX3 shard; an Ultima Online client, and a tool that can remove encryption from said client. Such a tool is needed since UOX3 does not accept connections from encrypted clients.

  ### Ultima Online

  If you followed the recommendations in the Requirements section up above, you will already have an Ultima Online client installed, and can skip to the next step about Razor. If not - don't panic! Go grab the latest client download - titled Classic Client - from the official UO website and install it, or visit the UOX3 community forums to read more about different UO client versions/expansions and compatibility with UOX3.

  ### Removing the Client Encryption with Razor

  With a UO client downloaded and installed, it's time to take care of the encryption. Go grab the UO:R Community Edition of Razor if you haven't already. It's being regularly maintained and updated, unlike the original Razor. Once you've got it unzipped (or installed, if there's an installer), right-click on Razor.exe, choose Properties, click the Compatibility tab, and check the checkbox for "Run this program in compatibility mode for Windows XP (Service Pack 3)". This, to avoid some potential issues with performance/client freezing on startup or login. Once done, start Razor!

  After a short wait, you'll be greeted by a welcome screen. Unless you encounter any issues, or you have multiple UO Client versions installed, just leave the Load Client part at 2D Client (Auto Detect). Make sure Patch client encryption is checked, and that the IP and Port matches what you setup for UOX3 in UOX.INI. If running client and server on same computer, the default UOX3 settings are 127.0.0.1 as IP and 2593 as Port.

  Once basic setup of Razor is complete, click the Okay button to launch the UO client. At this point you are now ready to enter your UOX3 username and password and log in!

  ### Alternative for Linux/macOS users - Use ClassicUO Client

  Note for Linux/macOS (and even Windows) users: An alternative to the regular UO client and Razor, neither of which run natively on Linux or macOS, is the ClassicUO client - an open-source, cross-platform client that can be used to connect to UOX3 without Razor - though it still requires the original UO data files to run, so you'll need to figure out a way to get those files over to your Linux/macOS machine.

  ClassicUO Client

  ClassicUO is a cross-platform (Windows, Linux, macOS), open source implementation of the Ultima Online Classic Client that runs faster, smoother and with more features and customizability than the original UO client. Some of the interesting features it offers:

  - Run client at up to 250 FPS
  - Run at any resolution, and any window size
  - Customize zoom level
  - Show lightsources even at max light level
  - Show custom aura colors under feet of all characters
  - Show network stats
  - Various quality of life features that have been available in various assist tools for decades... like showing stumps instead of trees, hiding roofs (a bit dubious...), etc.

  Check it out at the ClassicUO Website or @ GitHub!

- # First Five Minutes

- Logging In and Creating a Character

  Once your UOX3 shard has successfully started up (and importantly, remains running), and the UO client has loaded the login screen after you started it using a tool like Razor, you are ready to log in to your UOX3 shard for the first time.

  Enter the same username and password that you added in UOX3/accounts/accounts.adm during the initial UOX3 setup, and click Login. Select your UOX3 shard from the server listing that appears, and proceed through character creation to create your first character. Note that if you are logging in using the first account listed in accounts.adm - account 0 - all characters created on this account will automatically receive GM powers!

  As previously outlined in Decorating and Populating your UOX3 Shard, the first thing that will greet you on your first login is a welcome gump with options to start with a blank slate, or to use the default UOX3 world template to automatically generate decorations for your shard. If you skipped that step, or need a refresher on the options available to you, go read it now, and then continue to the next step here once done!

- Using Your First GM Commands

  Great! You have a character. Now what?

  If you're playing on the first account listed in UOX3\ACCOUNTS\accounts.adm (as you should), your characters will be classified as "admin" characters with automatic access to all Game Master and Admin powers and commands. However, the character doesn't quite look the part yet!

  ### Becoming a GM

  Let's start by turning your character into a proper Game Master. Type the following command into the UO client (don't forget the command prefix at the start of the command!):
  'make gm

  Once you hit Enter, your regular UO mouse cursor (a hand) will be replaced by a targeting cursor, so go ahead and target your own character, who should now get a nice, new, shiny red GM robe, which also grants the awesome, ultimate destructive power of... being able to walk through doors. For admin characters, who already have access to all commands, this is more of a formality than anything else.

  Bonus Tip - Changing the Command Prefix

  By default, the command prefix character used at the start of every GM command in UOX3 is set to '. You can change this command prefix via a setting called COMMANDPREFIX in UOX.INI if you'd rather use something else.

  ### Changing Colour of GM Robe

  Should you not be happy with the colour of your new robe, you can give it a facelift using the following command:
  'dye

  Once you target your character - or any other dynamic object in the game world - a menu (referred to in UO as a GUMP) will pop up, allowing you to choose a colour to apply to the targeted object.

  Bonus Tip - Dynamic vs Static Items

  Items you see in-game can usually be divided into two broad categories - dynamic and static items.

  Static items are a permanent addition to the map, and can be seen even when logged into an otherwise empty shard. These items cannot be removed, modified or moved around without the use of specialized, 3rd party map-editing tools.

  Dynamic items, on the other hand, are items you add to the game world, ones you can remove, move and manipulate. These are the decorations you place out, the doors that can be opened and the items in your backpack and equipped on your character's paperdoll. Some other emulators refer to these items (and characters) under the umbrella term mobiles.

  ### Becoming a Player Again

  If you want to revert back to looking like a normal player, or if you want to strip another player of their GM powers, you can use this command to reverse the process (don't worry, as an admin you'll still retain all your GM powers!):
  'make player

  Bonus Tip - Counselors

  The make command has a third variant, which allows you to assign someone as a Counselor for your shard. Like for GMs, the role of Counselor comes with a fancy robe, but a blue one instead of the GM's red:
  'make cns

  Someone who has been made a Counselor will have access to some - but not all - GM powers, in particular those that involve responding to player help requests and travelling around the game world.

  As with the command to turn someone into a GM, be careful who you deal out such power to. Remember: Power tends to corrupt, and absolute power corrupts absolutely!

- Getting Around the World

  Some of the most important GM commands to learn are the ones that allow you to traverse across Britannia and other realms in the blink of an eye, and the ones that provide you with information about where you are at any given point of time.

  The 'where command will show you the current in-game coordinates of your character, in the format of x, y, z, worldNumber, instanceID. If you walk around for a bit in the game, and use the command a couple more times, you might notice these coordinates changing. Before moving on to the next step, use where again, but this time make a note of the first three values. You'll need them soon!

  Next, as an exercise, try out the following GM commands to see what they do:
  'tele
  'travel or 'go
  'goplace 1
  'goplace 20

  Now that you have travelled the world, been places, maybe seen things you can never forget... it's time to return to your roots. Let's go back to the starting point, the location you were at when you used the where command earlier:
  'go x y z (replace x y and z with the values you got from the 'where command)

  UOX3 has many other commands that allow you to manipulate the coordinates of both characters and items in various ways, but these basic few are your bread and butter, the ones you'll keep coming back to in order to get things done.

- Adding Items and NPCs

  With the basics of travel commands under your belt already, it's time to move on to something a bit more interesting: Learning how to add objects like items and NPCs to your UOX3 shard! Your go-to tool for this will be the add command, which is a multi-purpose command that can be used in a variety of ways.

  ### Adding Items via Add-menu

  Let's jump right in using the following command:
  'add

  A GUMP menu system should now pop up, listing items and NPCs categorized by function and purpose. Select "Gear" from the menu, then "Clothing" from the next sub-menu, then "Headwear", before finally selecting "feathered hat". This last selection will close the GUMP menu, and add the selected object - in this case a feathered hat - into your character's backpack.

  Open the backpack by double-clicking your character, then double-clicking the backpack in the character paperdoll that pops up, or by using the default UO shortcut key - alt+i. Next, click and drag the feathered hat out of your backpack and onto the character paperdoll to equip it. Congratulations! You are now a GM wearing a feathered hat.

  This "add-menu" can be used to add a variety of items to the game. Some are gear, like the feathered hat, some are decorations that you drag out of your backpack and place in the game-world somewhere, and some are tools or resources used by your character's skills - like a pickaxe for mining, or a hammer for blacksmithing.

  Bonus Tip - Moving Immovable Items

  While adding items to your world, you might encounter a situation where the items you add won't highlight when you move your mouse cursor over them, and they cannot be picked up or dragged around, perhaps due to the item's movable state makes it immovable. The quickest way to overcome this issue is to use the following command, which will allow you to move all dynamic objects regardless of their immovable state:
  'allmove on

  ### Adding NPCs via Add-menu

  You can also add NPCs using the same command. Open the add-menu again using the same 'add command, and select "NPCs" from the menu. Next, select "Monsters", followed by "Humanoids", and finally "Orc". A targeting cursor will be presented, and once you select a spot in the game world, an Orc will appear.

  Since you're a GM with unlimited power, you are by default invulnerable to damage, so the Orc won't even bother attacking you, but will just start wandering around aimlessly. However, should you wish to engage the Orc in a fight, you can disable your invulnerability through the make player command from earlier, or the following command:
  'invul false

  Bonus Tip - Resurrecting Players (or yourself)

  If you bit off more than you could chew, and the Orc actually ended up killing your character, and you're now stuck in the bleak, grey realm of the dead - despair not! There's a command for that:
  'resurrect

  Target the ghost of any dead player character using this command to instantly bring them back to life!

  ### Adding Items or NPCs Directly

  Adding objects through the add-menu is all swell and good, but it can be a bit cumbersome and slow, especially if the items you need are nested deep inside some sub-menu! Thankfully there are faster ways of adding these objects. As long as you know the ID of the object you want to add, you can use the add command to add these objects directly without needing to slog through any menus!

  Try the following two commands:
  'add item 0x171A
  'add npc orc

  Both of the above examples should provide you with a targeting cursor to let you choose exactly where to add the item with ID 0x171a (feathered hat) or the NPC with id "orc" (Orc, duh). What if you don't know the ID of the object, though?

  To find the ID of an object that you want to add, you can either look it up in the DFN files under the UOX3\DFNDATA\ITEM or UOX3\DFNDATA\NPC folders, or you can use an in-game command that is also a powerful GM tool for adjusting the properties of objects - the tweak command.

  Try using this command to find the ID of the feathered hat or the Orc that you previously added:
  'tweak

  Take note of the ID displayed in the GUMP menu that pops up, and compare it to the ID you supplied to the add command above.

  Bonus Tip - Removing Items and NPCs

  Both items and NCPs can be removed using the remove command, which will bring up a targeting cursor to let you select which object to remove. Try it now, and target either the Orc or the feathered hat you previously dragged to your character's paperdoll:
  'remove

  As soon as you target an object, said object will be instantly and permanently removed from view and deleted from the game world!

- Next Steps to Master UOX3

  What is covered in the previous few sections of this document just barely scratches the surface of all there is to learn, know and do in UOX3, and it would be impossible to cover everything without writing a long novel of an instruction manual.

  From here on out, it's up to you to really dig into the guts of UOX3 to explore, discover, learn and eventually grok UOX3 completely. Fret not, however! You still have tools like these your disposal to ease your journey:

  ### The UOX3 Command List

  The command list contains detailed information on each and every command available in UOX3. If you're unsure about the specifics of a certain command, this is where you go. It can be found in the next section below, titled Additional UOX3 Info.

  ### The Feature Documentation

  Extensive documentation is also available for each major feature supported by UOX3. Go to the Feature Documentation section of this document if you want to dig into the various systems.

  ### The JS Engine

  The JavaScript Engine section of this documentation provides information about the scripting engine used in UOX3, along with details of all the various events/triggers, methods, functions and properties that you can make use of in your JS scripts to make your shard come to life.

  ### The Community Forums

  The community forums at UOX3.org contains many resources for both coding, scripting and managing your UOX3 shard. It can also be a great place to have a discussion on topics that don't require an immediate and instant response.

  ### The Community Discord

  Join the UOX3 community on Discord for a more direct line of communication with fellow UOX3 users and developers. Forums are great, but often it can be more efficient to have direct, near real-time conversations with other people.

  Using the above tools, and through the magic of friendship and community, there is nothing you cannot accomplish in UOX3 if you set your mind to it.

- # Additional UOX3 Info

- UOX.INI Settings

  The settings listed below can be found in uox.ini in the root UOX3 data folder, and can be modified and reloaded dynamically while UOX3 is running. After making a change, simply use the 'reloadini command in-game, or console command '1' after unlocking the UOX3 console by pressing '*'.

  [system]

  SERVERNAME=My UOX3 Server
  The (preferably) unique name that you want for your UOX3 shard!

  EXTERNALIP=127.0.0.1
  Your external/WAN IP address. If you want others to be able to connect to your shard from across the world, you'll need to supply your public IP here! If you just want to connect locally with a client on the same computer as UOX3, or just want to connect from another computer on the same LAN/WiFi network, leave this at the default setting.

  PORT=2593
  Port number that server listens on for connections.

  SERVERLANGUAGE=0
  Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 4 - French, 5 - Portuguese, 6 - Italian, 7 - Czech, 8 - Polish

  NETRCVTIMEOUT=0
  The time it takes for a connection to be dropped if no packets are received.

  NETSNDTIMEOUT=3
  Not in use.

  NETRETRYCOUNT=0
  The number of times a network receive will be attempted before it throws an error.

  CONSOLELOG=1
  Toggles logging of console messages, warnings and errors

  NETWORKLOG=1
  Toggles logging of network traffic (packets)

  SPEECHLOG=1
  Toggles logging of player/staff speech

  COMMANDPREFIX='
  Character that acts as the command prefix.

  ANNOUNCEWORLDSAVES=1
  Determines if world-saves are announced.

  JOINPARTMSGS=1
  Determines if player join/part messages are enabled.

  BACKUPSENABLED=0
  Determines if backups are enabled.

  BACKUPSAVERATIO=5
  Number of saves before a backup occurs.

  SAVESTIMER=300
  Number of seconds between world saves.

  ACCOUNTISOLATION=1
  Not in use.

  UOGENABLED=0
  Determines if support for the UOGateway Info Request Service is enabled.

  CUOENABLED=0
  Determines if support for the ConnectUO Server Poll Packet request is enabled.

  RANDOMSTARTINGLOCATION=0
  If 1, new player characters start in a random starting location instead of one they choose during character creation.

  ASSISTANTNEGOTIATION=0
  If 1, UOX3 will attempt to negotiate features with the player's assist-tool (Razor, AssistUO, etc). Negotiate, in this context, means tell the assist tool what features to disable! See [disabled assistant features] for a list of features that can be disabled.

  KICKONASSISTANTSILENCE=0
  If 1, UOX3 will disconnect players who's clients (or assist tools, rather) don't respond to the request to negotiate features.

  CLASSICUOMAPTRACKER=0
  If 1, UOX3 will respond to ClassicUO client's WorldMap packet request for party/guild member location info.

  JSENGINESIZE=256
  gcMaxBytes limited in MB per JS Runtime. Must be between 16 and 4095! Essentially defines how much memory JS engine should be allowed to allocate before last-ditch GC kicks in.

  USEUNICODEMESSAGES=1
  If 1, UOX3 will send messages/text to client in Unicode mode, which changes the font used to display the text, but also ensures that characters with accents used in languages like Czech, French, Spanish, etc are displayed properly.

  CONTEXTMENUS=1
  If 1, context menus will be displayed when clicking on/hovering over dynamic objects. If 0, such context menus are disabled.

  SYSMESSAGECOLOUR=72
  Default colour of system messages sent to players.

  MAXCLIENTBYTESIN=25000
  Network budget for incoming traffic from a given connected client, usage beyond which they will receive warnings for, or temporary bans.

  MAXCLIENTBYTESOUT=100000
  Network budget for outgoing traffic to a given connected client, usage beyond which they will receive warnings for, or temporary bans.

  NETTRAFFICTIMEBAN=30
  Duration in minutes that an account will be banned after exceeding network budget three times in same session.

  [clientsupport]

  Note that each of these settings represents a range of client versions, ranging from the one specified to the next one just before the next available setting. So CLIENTSUPPORT4000 ranges from v4.0.0.0 until whichever the last version before v5.0.0.0 (CLIENTSUPPORT5000) was.

  NOTE: While it is possible to enable login-support for all the ranges of client-versions listed below, how well they will work depends very much on what version of the datafiles are used on the server. It is highly recommended to restrict client-support to whichever range of versions is closest to the client-version the datafiles in use on the server are from.

  CLIENTSUPPORT4000=0
  Enables login-support for all clients in the 4.0.x range

  CLIENTSUPPORT5000=0
  Enables login-support for all clients in the 5.0.x range

  CLIENTSUPPORT6000=0
  Enables login-support for clients from 6.0.0 to 6.0.4.x

  CLIENTSUPPORT6050=0
  Enables login-support for clients from 6.0.5.0 to 6.0.14.x

  CLIENTSUPPORT7000=0
  Enables login-support for clients from 7.0.0.0 to 7.0.8.x

  CLIENTSUPPORT7090=0
  Enables login-support for clients from 7.0.9.0 to 7.0.15.x

  CLIENTSUPPORT70160=0
  Enables login-support for clients from 7.0.16.0 to 7.0.23.x

  CLIENTSUPPORT70240=0
  Enables login-support for clients from 7.0.24.0 to 7.0.29.x

  CLIENTSUPPORT70300=0
  Enables login-support for clients from 7.0.30.0 to 7.0.33.0

  CLIENTSUPPORT70331=1
  Enables login-support for clients from 7.0.33.1 to 7.0.45.64

  CLIENTSUPPORT704565=1
  Enables login-support for clients from 7.0.45.65 to 7.0.60.x

  CLIENTSUPPORT70610=1
  Enables login-support for clients from 7.0.61.0 and above

  [skill & stats]

  SKILLLEVEL=5
  Global difficulty level for crafting items. 1=Easiest, 5=Default, 10=Difficult.

  SKILLCAP=7000
  Total number of skillpoints available for each player.

  SKILLDELAY=5
  Number of seconds that must pass after a skill is used, before another skill can be used.

  STATCAP=225
  Total number of statpoints available for each player.

  STATSAFFECTSKILLCHECKS=0
  If 1, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn.

  EXTENDEDSTARTINGSTATS=1
  Toggles whether to allow the extended starting stats (90 statpoints in total) for new characters created with client versions 7.0.16+

  EXTENDEDSTARTINGSKILLS=1
  Toggles whether to allow the fourth starting skill (and 120 skillpoints in total) for new characters created with client versions 7.0.16+

  MAXSTEALTHMOVEMENTS=10
  Max number of steps allowed with stealth skill at 100.0

  MAXSTAMINAMOVEMENTS=15
  Max number of steps allowed while running before stamina is reduced.

  SNOOPISCRIME=0
  Determines if snooping is a crime or not.

  ARMORAFFECTMANAREGEN=1
  Toggles whether or not armor affects mana regeneration rate

  [timers]

  CORPSEDECAYTIMER=900
  Amount of time for a corpse to decay.

  WEATHERTIMER=60
  Amount of time between changing light levels (day cycles).

  SHOPSPAWNTIMER=300
  Amount of time between shopkeeper restocks.

  DECAYTIMER=300
  Amount of time a decayable item will remain on the ground before disappearing.

  DECAYTIMERINHOUSE=3600
  Amount of time a decayable item will remain on the floor of a house before disappearing, if not locked down.

  INVISIBILITYTIMER=60
  Duration of the invisibility spell.

  OBJECTUSETIMER=1
  Amount of time a player must wait between using objects.

  GATETIMER=30
  Duration of a summoned moongate.

  POISONTIMER=180
  Duration of the poison effect on a character.

  LOGINTIMEOUT=300
  Amount of time for an idle connection to time out.

  HITPOINTREGENTIMER=8
  Amount of time required to regenerate a single point of health.

  STAMINAREGENTIMER=3
  Amount of time required to regenerate a single point of stamina.

  MANAREGENTIMER=5
  Amount of time required to regenerate a single point of mana.

  BASEFISHINGTIMER=10
  Base time for fishing skill to complete an attempt at fishing.

  RANDOMFISHINGTIMER=5
  Max random time for fishing skill to complete.

  SPIRITSPEAKTIMER=30
  Duration of the spirit speak skill.

  PETOFFLINECHECKTIMER=600
  Sets the interval in seconds between checks for the player offline time.

  NPCFLAGUPDATETIMER=5
  Interval in seconds between each time NPC flags are updated.

  [directories]

  DIRECTORY=./
  Root UOX3 directory

  DATADIRECTORY=C:/Program Files/Ultima Online/
  Where UOX3 looks for the UO data files.
  Minimum required data files: map0.mul/map0LegacyMUL.uop, multi.idx, multi.mul, staidx0.mul, statics0.mul, tiledata.mul
  Optional data files: map(1-5).mul/map(1-5)LegacyMUL.uop, mapdif(0-2).mul, mapdifl(0-2).mul, stadif(0-2).mul, stadifi(0-2).mul, stadifl(0-2).mul, staidx(1-5).mul, statics(1-5).mul

  DEFSDIRECTORY=./dfndata/
  Where UOX3 looks for the DFN-files.

  BOOKSDIRECTORY=./books/
  Where UOX3 saves the .bok files for books.

  ACTSDIRECTORY=./accounts/
  Where UOX3 looks for/saves account files.

  SCRIPTSDIRECTORY=./js/
  Where UOX3 looks for Javascripts

  BACKUPDIRECTORY=./archives/
  Where UOX3 backs up worldsaves.

  MSGBOARDDIRECTORY=./msgboards/
  Where UOX3 stores bulletin-board messages.

  SHAREDDIRECTORY=./shared/
  Where UOX3 stores the worldfiles.

  ACCESSDIRECTORY=./accounts/
  Where UOX3 looks for/saves account files.

  HTMLDIRECTORY=./html/
  Where UOX3 generates serverstatus-HTML-files

  LOGSDIRECTORY=./logs/
  Where UOX3 saves server logs.

  DICTIONARYDIRECTORY=./dictionaries/
  Where UOX3 looks for dictionary-files.

  [settings]

  LOOTDECAYSWITHCORPSE=1
  Determines if loot decays along with corpses or not.

  GUARDSACTIVE=1
  Determines if guards are enabled globally or not.

  DEATHANIMATION=1
  Determines if the Deathanimation is played when a player dies.

  AMBIENTSOUNDS=5
  Ambient sounds, from 1 - 10. Higher value means ambient sounds are played less often.

  AMBIENTFOOTSTEPS=0
  Determines if the footstep-sounds hardcoded in UOX3 are used or not (different sounds on different tiles).

  INTERNALACCOUNTCREATION=0
  If enabled, new accounts are created automatically when someone logs in with an unknown username.

  SHOWOFFLINEPCS=1
  If enabled, offline PCs can be seen by GMs.

  ROGUESENABLED=1
  If enabled, then the stealing skill is enabled.

  PLAYERPERSECUTION=0
  If enabled, dead players can attack living ones, and thus drain their mana.

  ACCOUNTFLUSH=0
  How often (in minutes) online accounts are checked to see if they really ARE online.

  HTMLSTATUSENABLED=-1
  If > 0 then UOX3 generates server-status pages in the HTML directory.

  SELLBYNAME=0
  Determines if items are sold by their name, not just ID/Colour.

  SELLMAXITEMS=5
  Maximum number of items that can be sold to a vendor at a time.

  BANKBUYTHRESHOLD=2000
  Defines the lower limit for when a purchase will withdraw money from bank instead of backpack

  TRADESYSTEM=0
  Determines if the Tradesystem is enabled or not (fluctuation of vendor prices across regions - check documentation for Advanced Trade System.)

  RANKSYSTEM=1
  If enabled, item creation allows for variable quality of items.

  CUTSCROLLREQUIREMENTS=1
  If enabled, there is no skill requirements for casting spells from scrolls.

  NPCTRAININGENABLED=1
  If enabled, NPCs can train player-characters.

  HIDEWILEMOUNTED=1
  If enabled, a character can hide/stealth while mounted.

  WEIGHTPERSTR=3.5
  How much weight per point of STR a character can hold.

  POLYDURATION=90
  Duration of the polymorph spell.

  CLIENTFEATURES=1021183
  Can be used to enable/disable specific expansion-related client-side features. See clientfeatures List for details:

  clientfeatures List

  (0x01) 1: Enable T2A support (chat-button, lost lands)
  (0x02) 2: Enable UO:R support (Felucca/Trammel)
  (0x04) 4: Enable TD support (First 3D client, Ilshenar)
  (0x08) 8: Enable LBR support (skills, maps, MP3s, LBR monsters in 2D client)
  (0x10) 16: Enable AoS support (necro/palas, malas map, resistances, weapon abilities, AoS monsters, detailed tooltips) (Not implemented)
  (0x20) 32: Enable Sixth Character Slot support
  (0x40) 64: Enable SE support (ninja/samurai, spells, skills, tokuno-map)
  (0x80) 128: Enable ML support (elves, spells, skills)
  (0x100) 256: Enable (basic) KR support (2D client only, up to 6.0.14.1)
  (0x200) 512:Enable the Ninth Age splash screen and crystal/shadow housing tiles
  (0x400) 1024:Enable the Tenth Age
  (0x800) 2048:Enable increased housing and bank-storage
  (0x1000) 4096:Enable 7th character slot
  (0x2000) 8192:Enable KR faces (Not implemented)
  (0x4000) 16384:Enable Trial Account (Not implemented)
  (0x8000) 32768: Live (non-trial) Account. Since client 4.0 this bit has to be set, otherwise bits 3..14 are ignored.
  (0x10000) 65536: Enable SA features: gargoyle race, spells, skills, housing tiles (Partially implemented)
  (0x20000) 131072: Enable HS features (Not implemented)
  (0x40000) 262144: Enable Gothing housing tiles
  (0x80000) 524288: Enable Rustic housing tiles
  (0x100000) 1048576: Enable Jungle housing tiles
  (0x200000) 2097152: Enable Shadowguard housing tiles
  (0x400000) 4194304: Enable Time of Legends features (Not implemented)
  (0x800000) 8388608: Enable Endless Journey account (Not implemented)

  The above flags can be mixed and matched to enable specific features on the client (depending on client version). Simply add together the decimal numbers of the desired features, and put the end-result in the CLIENTFEATURES tag.

  SERVERFEATURES=4584
  Can be used to enable/disable specific expansion-related server-side features. See serverfeatures List for details:

  serverfeatures List

  (0x01) 1: Unknown
  (0x02) 2: IGR
  (0x04) 4: OneChar - One char per account only, Siege Perilious style,
  (0x08) 8: ContextMenus
  (0x10) 16: LimitChar - Limit amount of chars, combine with OneChar
  (0x20) 32: AoS - Enable Tooltips, fight system book
  (0x40) 64: SixChars - Six character slots
  (0x80) 128: SE
  (0x100) 256: ML
  (0x200) 512: Unknown2 - added with UO:KR launch
  (0x400) 1024: Send UO3D client type? client sends 0xE1?)
  (0x800) 2048: Unknown3 - added sometime between UO:KR and UO:SA
  (0x1000) 4096: SeventhCharacterSlot
  (0x2000) 8192: Unknown4 - added with UO:SA launch
  (0x4000) 16384: new movement system (Not implemented)
  (0x8000) 32768: Unlock new Felucca faction-areas (Not implemented)

  The above flags can be mixed and matched to enable specific features on the server. Simply add together the decimal numbers of the desired features, and put the end-result in the SERVERFEATURES tag.

  SPAWNREGIONSFACETS=0
  Can be used to enable/disable spawn regions for specific facets of the shard. See facet list for details:

  facet list

  (0x00) 0: All spawn regions disabled
  (0x01) 1: Felucca enabled
  (0x02) 2: Trammel enabled
  (0x04) 4: Ilshenar enabled
  (0x08) 8: Malas enabled
  (0x10) 16: Tokuno enabled
  (0x20) 32: Ter Mur enabled

  The above flags can be mixed and matched to enable spawn regions for one or more facets on the server. Simply add together the decimal numbers of the desired facets, and put the end-result in the SPAWNREGIONSFACETS tag.

  Examples: SPAWNREGIONSFACETS=1 means only Felucca has spawn regions enabled. A value of 3 means Felucca plus Trammel are enabled. A value of 10 means Malas plus Trammel (the only ones that add up to 10), and 63 equals ALL facets being enabled.

  OVERLOADPACKETS=1
  Toggles whether or not JS can handle incoming/outgoing network packets

  ADVANCEDPATHFINDING=1
  Enables/disables the A* Pathfinding routine for NPCs

  LOOTINGISCRIME=1
  Toggles whether looting (innocent/blue) corpses is a crime or not

  BASICTOOLTIPSONLY=0
  If enabled, tooltips will only show name and weight of items

  GLOBALITEMDECAY=1
  Toggles decay on/off on a global scale. Does not remove decay flag from items, only stops them from decaying

  SCRIPTITEMSDECAYABLE=1
  Toggles default decay status of DFN items. Can be overriden by DECAY tag in item-DFNs

  BASEITEMSDECAYABLE=0
  Toggles default decay status of base items. Can be overriden by DECAY tag in harditems.dfn

  PAPERDOLLGUILDBUTTON=1
  Toggles whether or not the Guild-button on the paperdoll can be used as a shortcut for interacting with guildstones. Defaults to on.

  FISHINGSTAMINALOSS=2
  Sets the amount of stamina lost when fishing.

  ITEMSDETECTSPEECH=0
  Toggles whether or not onSpeech JS events can trigger in scripts attached to items. Potentially has performance implications if enabled. Defaults to off.

  MAXPLAYERPACKITEMS=125
  Sets max amount of items players can keep in their backpack.

  MAXPLAYERBANKITEMS=125
  Sets max amount of items players can keep in their bank box.

  MAPDIFFSENABLED=0
  If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default.

  [pets and followers]

  MAXCONTROLSLOTS=5
  Maximum number of pet control slots available to player. Disabled if 0

  MAXFOLLOWERS=5
  Maximum pets/followers a player can have active at the same time. Used if control slots are disabled

  MAXPETOWNERS=10
  Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame

  CHECKPETCONTROLDIFFICULTY=1
  Enable/Disable pet control difficulty system

  PETLOYALTYGAINONSUCCESS=1
  Amount of pet loyalty gained on successful pet command use

  PETLOYALTYLOSSONFAILURE=3
  Amount of pet loyalty lost on failed pet command use

  PETLOYALTYRATE=900
  Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max

  [speedup]

  CHECKITEMS=1.5
  How often (in seconds) items are checked for decay and other things.

  CHECKBOATS=0.65
  How often (in seconds) boats are checked for motion and so forth.

  CHECKNPCAI=1
  How often (in seconds) NPCs can execute an AI routine.

  CHECKSPAWNREGIONS=30
  How often (in seconds) spawn regions are checked for new spawns.

  NPCMOVEMENTSPEED=0.6
  Allows customization of NPC movement speed. Can be overridden by WALKINGSPEED tag in NPC-DFNs

  NPCRUNNINGSPEED=0.2
  Allows customization of NPC running speed. Can be overridden by RUNNINGSPEED tag in NPC-DFNs

  NPCFLEEINGSPEED=0.4
  Allows customization of NPC fleeing speed. Can be overridden by FLEEINGSPEED tag in NPC-DFNs

  NPCMOUNTEDWALKINGSPEED=0.3
  Allows customization of mounted NPC movement speed. Can be overridden by WALKINGSPEEDMOUNTED tag in NPC-DFNs

  NPCMOUNTEDRUNNINGSPEED=0.12
  Allows customization of mounted NPC running speed. Can be overridden by RUNNINGSPEEDMOUNTED tag in NPC-DFNs

  NPCMOUNTEDFLEEINGSPEED=0.25
  Allows customization of mounted NPC fleeing speed. Can be overridden by FLEEINGSPEEDMOUNTED tag in NPC-DFNs

  NPCSPELLCASTSPEED=1
  Used to adjust how often NPCs cast spells in combat. Global setting, defaults to 1. Can be finetuned per NPC using SPADELAY DFN tag.

  GLOBALATTACKSPEED=1
  Multiplier used to adjust the attack speed globally for all characters. Defaults to 1. A value of 1.5 would make combat 50% faster globally, while a value of 0.5 would make it 50% slower globally. Can be finetuned per NPC via DEX stat in DFNs.

  [message boards]

  POSTINGLEVEL=0
  If 0, only GMs can post on Bulletin Boards, otherwise free for all.

  REMOVALLEVEL=0
  If 0, only GMs can remove posts on Bulletin Boards, otherwise free for all.

  [escorts]

  ESCORTENABLED=1
  If 1, NPC escorting is enabled.

  ESCORTINITEXPIRE=900
  Amount of time until an escort-NPC will vanish while waiting for someone to start escorting it.

  ESCORTACTIVEEXPIRE=600
  Amount of time until an escort NPC will vanish while a player is escorting it.

  ESCORTDONEEXPIRE=600
  Amount of time until an escort NPC will vanish when it has reached it's destination.

  [worldlight]

  DUNGEONLEVEL=3
  Specifies the light-level of Dungeon-areas.

  BRIGHTLEVEL=0
  Specifies the brightest light-level in the day/night cycles.

  DARKLEVEL=5
  Specifies the darkest light-level in the day/night cycles.

  SECONDSPERUOMINUTE=5
  Number of real seconds per UOX3 minute.

  [tracking]

  BASERANGE=10
  Minimum range even a novice can track from.

  BASETIMER=30
  Tracking timer - maximum time a GrandMaster can track someone.

  MAXTARGETS=20
  Maximum number of targets that can be tracked.

  MSGREDISPLAYTIME=30
  How often (in seconds) the tracking message is redisplayed.

  [reputation]

  MURDERDECAYTIMER=60
  Amount of time before a permanent murder count will decay.

  MAXKILLS=4
  Maximum number of kills before turning red.

  CRIMINALTIMER=120
  Amount of time a character remains criminal after committing a criminal act.

  [resources]

  MINECHECK=1
  Type of mining check performed - 0 = anywhere, 1 = mountains/cavefloors

  RESOURCEAREASIZE=8
  Affects the number of resource-areas the world is split into. A value of 8 splits the world into areas sized 8x8 tiles

  OREPERAREA=10
  Maximum number of ores in a given resource area.

  ORERESPAWNTIMER=600
  Amount of time it takes for 1 single ore to respawn in a resource area.

  LOGSPERAREA=3
  Maximum number of logs in a given resource area.

  LOGSRESPAWNTIMER=600
  Amount of time it takes for 1 single log to respawn in a resource area.

  FISHPERAREA=3
  Maximum number of fish in a given resource area.

  FISHRESPAWNTIMER=600
  Amount of time it takes for 1 single fish to respawn in a resource area.

  [hunger]

  HUNGERRATE=6000
  Amount of time a player has before his hunger level decreases.

  HUNGERDMGVAL=2
  Amount of damage applied if hungry and below threshold.

  PETHUNGEROFFLINE=1
  Toggles whether pets should hunger while the player (owner) is offline or not.

  PETOFFLINETIMEOUT=5
  Sets the time in days for when an offline player's pet becomes wild again.

  [combat]

  MAXRANGE=10
  Maximum range (in tiles) at which combat can occur.

  SPELLMAXRANGE=10
  Maximum range (in tiles) at which spells can be cast.

  DISPLAYHITMSG=1
  If 1, hit messages are displayed in combat.

  DISPLAYDAMAGENUMBERS=1
  If 1, damage numbers are displayed above characters in combat.

  MONSTERSVSANIMALS=1
  If 1, monsters can attack animals.

  ANIMALATTACKCHANCE=15
  The chance of animals being attacked by monsters (0-100)

  ANIMALSGUARDED=0
  If 1, animals are under the protection of town guards.

  NPCDAMAGERATE=2
  NPC Damage divisor - PCs sustain less than NPCs. If a PC, damage is 1/value.

  NPCBASEFLEEAT=20
  % of HP where an NPC will flee from combat, if it's not defined for it already in the DFNs.

  NPCBASEREATTACKAT=40
  % of HP where an NPC will resume attacking, if it's not defined for it already in the DFNs.

  ATTACKSTAMINA=-2
  Amount of stamina lost when hitting an opponent.

  ATTACKSPEEDFROMSTAMINA=1
  If 1, attack speed in combat is derived from stamina instead of dexterity.

  ARCHERYHITBONUS=10
  Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10%

  ARCHERYSHOOTDELAY=0.5
  If 1, adds an extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon)

  SHOOTONANIMALBACK=0
  If 1, archery from horseback is possible.

  COMBATEXPLODEDELAY=2
  The amount of time it takes for the damage from the Explosion spell to be inflicted on the target.

  WEAPONDAMAGECHANCE=17
  The chance (in %) of weapons taking damage in combat.

  WEAPONDAMAGEMIN=0
  The min amount of damage (randomized) weapons can take if it takes damage in combat.

  WEAPONDAMAGEMAX=1
  The max amount of damage (randomized) weapons can take if it takes damage in combat.

  ARMORDAMAGECHANCE=33
  The chance (in %) of armor taking damage in combat.

  ARMORDAMAGEMIN=0
  The min amount of damage (randomized) armor can take if it takes damage in combat.

  ARMORDAMAGEMAX=1
  The max amount of damage (randomized) armor can take if it takes damage in combat.

  ALCHEMYBONUSENABLED=0
  Enables/disables bonus damage from Alchemy skill for explosion potions. Defaults to disabled.

  ALCHEMYBONUSMODIFIER=5
  The modifier used to add bonus damage based on Alchemy skill for explosion potions. Defaults to 1 bonus damage per 5 skill-points in Alchemy skill, using the following formula: bonusDamage = alchemySkill / modifier

  ARMORCLASSDAMAGEBONUS=0
  Enables/disables double damage from armour class bonuses. Defaults to disabled.

  [start locations]

  Startlocations used by the character-creation process in the client. Fixed amount of locations, using the following format: LOCATION=TOWN,BUILDING,X,Y,Z,WORLD,INSTANCE,CLILOCMSG (description of town)

  Default setup:
  LOCATION=Yew,Center,545,982,0,0,0,1075072
  LOCATION=Minoc,Tavern,2477,411,15,0,0,1075073
  LOCATION=Britain,Sweet Dreams Inn,1495,1629,10,0,0,1075074
  LOCATION=Moonglow,Docks,4406,1045,0,0,0,1075075
  LOCATION=Trinsic,West Gate,1832,2779,0,0,0,1075076
  LOCATION=Magincia,Docks,3675,2259,26,0,0,1075077
  LOCATION=Jhelom,Docks,1492,3696,0,0,0,1075078
  LOCATION=Skara Brae,Docks,639,2236,0,0,0,1075079
  LOCATION=Vesper,Ironwood Inn,2771,977,0,0,0,1075080

  [startup]

  STARTGOLD=1000
  Amount of gold a new PC starts with.

  STARTPRIVS=0
  Starting privileges of new characters (UNUSED).

  [gumps]

  TITLECOLOUR=0
  Default text colour for titles in gumps.

  LEFTTEXTCOLOUR=0
  Default text colour for left text in gumps (2 column ones).

  RIGHTTEXTCOLOUR=0
  Default text colour for right text in gumps (2 column ones).

  BUTTONCANCEL=4017
  Default Button ID for cancel button in gumps.

  BUTTONLEFT=4014
  Default Button ID for left button (navigation) in gumps.

  BUTTONRIGHT=4005
  Default Button ID for right button (navigation) in gumps.

  BACKGROUNDPIC=2600
  Default Gump ID for background gump.

  [houses]

  TRACKHOUSESPERACCOUNT=1
  Toggles whether house ownership is tracked per account (1) or per character (0).

  CANOWNANDCOOWNHOUSES=1
  Toggles whether players can both own and co-own houses at the same time.

  COOWNHOUSESONSAMEACCOUNT=1
  Toggles whether all characters on the same account will be treated as co-owners of a house owned by any character on that account.

  ITEMDECAYINHOUSES=0
  Toggles default decay status of non-locked down items in multis (houses and boats). Defaults to off.

  PROTECTPRIVATEHOUSES=1
  Toggles whether players are able to enter private houses or not, if they're not a co-owner, friend or guest of the house.

  MAXHOUSESOWNABLE=1
  Sets the max amount of houses that is ownable per player, either per account (if TRACKHOUSESPERACCOUNT is enabled) or per character (if not).

  MAXHOUSESCOOWNABLE=10
  Sets the max amount of houses that is co-ownable per player.

  [towns]

  POLLTIME=3600
  Time (in seconds) for which a town voting poll is open.

  MAYORTIME=36000
  Time (in seconds) that a PC would be a mayor.

  TAXPERIOD=1800
  Time (in seconds) between periods of taxes for PCs.

  GUARDSPAID=3600
  Time (in seconds) between payments for guards.

  [disabled assistant features]

  AF_FILTERWEATHER=0
  Weather Filter

  AF_FILTERLIGHT=0
  Light Filter

  AF_SMARTTARGET=0
  Smart Last Target

  AF_RANGEDTARGET=0
  Range Check Last Target

  AF_AUTOOPENDOORS=0
  Automatically Open Doors

  AF_DEQUIPONCAST=0
  Unequip Weapon on spell cast

  AF_AUTOPOTIONEQUIP=0
  Un/Re-equip weapon on potion use

  AF_POISONEDCHECKS=0
  Block heal If poisoned/Macro IIf Poisoned condition/Heal or Cure self

  AF_LOOPEDMACROS=0
  Disallow Looping macros, For loops, and macros that call other macros

  AF_USEONCEAGENT=0
  The use once agent

  AF_RESTOCKAGENT=0
  The restock agent

  AF_SELLAGENT=0
  The sell agent

  AF_BUYAGENT=0
  The buy agent

  AF_POTIONHOTKEYS=0
  All potion hotkeys

  AF_RANDOMTARGETS=0
  All random target hotkeys (Not target next, last target, target self)

  AF_CLOSESTTARGETS=0
  All closest target hotkeys

  AF_OVERHEADHEALTH=0
  Health and Mana/Stam messages shown over player's heads

  AF_AUTOLOOTAGENT=0
  The autoloot agent (AssistUO)

  AF_BONECUTTERAGENT=0
  The bone cutter agent (AssistUO)

  AF_JSCRIPTMACROS=0
  Javascript macro engine (AssistUO)

  AF_AUTOREMOUNT=0
  Auto remount after dismount (AssistUO)

  AF_AUTOBANDAGE=0
  Automatically apply bandages when low on health (UOSteam)

  AF_ENEMYTARGETSHARE=0
  Share enemy target in party/guild/alliance chat (UOSteam)

  AF_FILTERSEASON=0
  Force client to display a fixed season (UOSteam)

  AF_SPELLTARGETSHARE=0
  Share spell target in party/guild/alliance chat (UOSteam)

  AF_HUMANOIDHEALTHCHECKS=0
  Check health of nearby humanoid characters? (UOSteam)

  AF_SPEECHJOURNALCHECKS=0
  Check journal for specific messages sent from server (UOSteam)

- Command List

  Most of the commands below can be executed by GameMasters or Administrators only, but some are also usable by regular players. To make changes to who can access a particular command, check the RegisterCommand() line at the top of every command script in the UOX3\js\commands folder, or the UOX3\dfndata\commands\commands.dfn file for commands that are still hardcoded.

  In both cases, the number associated with a given command makes it available to either admins (5), GMs (2), Counselors (1) or Players (0). These default command levels can be modified in UOX3\dfndata\commands\commands.dfn.

  Legacy

  d - Decimal number
  x, y, z - Coordinates in decimal numbers
  h - Hexdecimal number, often in the form of 0x####
  s - String
  text - Text to send with the command
  target - A target is required.
  on / off - Used to toggle settings
  nothing - Command that accepts params, but can function without them

  Note that commands are non-case-sensitive, and are shown in camelCase here just for readability's sake.

  A
  action

  The character of the player using this command performs the specified animation. See NPCAction list for possible actions!

  Command: 'action
  Parameters: (h/d) (hex or decimal)

  Example: 'action 1

  add

  Opens GM Add-menu if no parameters provided, or adds raw item if provided with hex-id, while item adds specified item from item-dfns, npc adds specified NPC from npc-dfns, and spawner adds a specified item from the item-dfns, to function as a spawner. Accepts a value after numerical/hexdecimal item IDs to randomize (using provided value) item being added.

  Command: 'add
  Parameters: (nothing) / (h) / (h rndVal) / item (s) / item (s rndVal) /npc (s) / spawner (s)

  Examples:
  'add npc orc
  'add 0x04a9 (add base wooden floor tile)
  'add 0x04a9 3 (add random base wooden floor tile between 0x04a9 and 0x04ac)
  'add item 0x171a (add scripted feathered hat)
  'add item 0x04a9 3 (add random scripted wooden floor between 0x04a9 and 0x04ac)

  addAccount

  Adds an account. First string is username, second is password, hex parameter is privs (if any).

  Command: 'addAccount
  Parameters: (s s h)

  Example: 'addAccount testuser testpass 0x0

  addPack

  With no parameters, it adds a backpack (if missing) to any targeted character. Using either string or HEX hexid will add the specified item (string = from dfns, hex = from tiledata) to targeted player's backpack.

  Command: 'addPack
  Parameters: (target) / (s) / HEX (h)

  Examples:
  'addPack (add backpack to targeted character)

  'addPack 0x04a9 (add raw wooden tile in backpack)
  addX

  Adds a new raw item to your current location. Accepts a value after the itemID to specify Z height to spawn item at.

  Command: 'addX
  Parameters: (h) / (h z)

  Example: 'addX 0x04a9
  Example: 'addX 0x04a9 10

  adminYell

  Broadcasts text to all players online with command level of 3 and above.

  Command: 'adminYell
  Parameters: (text)

  Example: 'adminYell Hello fellow admins!

  allMove

  Enables or disables a GMs ability to pick up all objects.

  Command: 'allMove
  Parameters: on / off

  Example: 'allMove on

  announce

  Enables or disables global announcement of worldsaves.

  Command: 'announce
  Parameters: on / off

  Example: 'announce off

  areaCommand

  Used to perform other commands on all items within a targeted area.

  Command: 'areaCommand
  Parameters: dye (h) / wipe / incX (d) / incY (d) / incZ (d) / setX (d) / setY (d) / setZ (d) / setType (d) / newbie (d) / setScpTrig (d) / movable (d)

  Example: 'areaCommand dye 0x83ea

  B
  bolt

  Animates a harmless lightning bolt on target.

  Command: 'bolt
  Parameters: (target)

  browse

  Opens a specified website in user's default browser.

  Command: 'browse
  Parameters: (s)

  brightLight

  Sets the brightest lightlevel in the day/night-cycles (Day: 0x00. Traditional OSI night: 0x09. Pitch black: 0x1F)

  Command: 'brightLight
  Parameters: (d / h)

  buy

  Opens the "buy"-gump for specified vendor.

  Command: 'buy
  Parameters: (target)

  C
  cleanup

  Deletes all corpses and temporary moongates in the world.

  Command: 'cleanup

  cnsYell

  Counselor Yell - Announces a message to all with Counselor privileges or above.

  Command: 'cnsYell
  Parameters: (text)

  Example: 'cnsYell Everyone meet up at Counselor HQ in 10 minutes!

  command

  Manually executes commands normally triggered from scripts like menus.dfn, item DFNs, etc. Most are already available as stand-alone commands.

  Command: 'command
  Parameters: (cmd param)

  > addItem (itemID)
  > addSpawner (spawner ID)
  > cPage (text)
  > gmMenu (menu ID)
  > gmPage (text)
  > gCollect
  > goPlace (location ID)
  > guiInformation
  > itemMenu (item menu ID)
  > information
  > makeMenu (crafting menu ID)
  > polymorph (skin ID)
  > sysMessage (text)
  > skin (colour)
  > version
  > webLink (url)

  Examples:
  'command addItem 0x171a (add a feathered hat in inventory)
  'command cPage Hello, anyone there? (adds a help request in Counselor queue)
  'command gmMenu 1 (opens gmMenu 1 from menus.dfn - same as gmMenu command)
  'command guiInformation (shows same server info gump as from help menu)
  'command makeMenu 1 (opens makeMenu 1 from create DFNs)
  'command sysMessage Event starts in 10 minutes, at Castle British! (sends system message to all players)

  consoleTest

  Just displays some colourful stuff in the UOX3 console, just a test command =)

  Command: 'consoleTest

  cont

  Shortcut command to make targeted item a container, and set it to nondecay and movable 2.

  Command: 'cont
  Parameters: (target)

  cq

  Perform various tasks relating to the Counselor Queue; Go to next call in the queue, clear the current call, go to current call, transfer current call to GM queue.

  If nothing is specified, the Counselor Queue will be displayed.

  Command: 'cq
  Parameters: (nothing) / next / clear / curr / transfer

  cStats

  Opens a gump displaying the stats of the targeted character.

  Command: 'cStats
  Parameters: (target)

  D
  darkLight

  Sets the darkest lightlevel in the day/night cycles (Day: 0x00. Traditional OSI night: 0x09. Pitch black: 0x1F)

  Command: 'darkLight
  Parameters: (d / h)

  decay

  Enables decay for the targeted item, after which it will follow regular rules for item decay.

  Command: 'decay
  Parameters: (target)

  decorate

  Can be used to save/load world template files, which can be used to quickly decorate a shard with objects of various types across one or more facets. Supported sub-commands: save (save items to templates), load (load items from templates), clean (remove duplicate items) and copy (copy items from one facet to another).

  World templates are saved to/loaded from a subfolder of SCRIPTDATADIRECTORY (set in uox.ini) titled "worldtemplates", which by default can be found at uox3/js/jsdata/worldtemplates.

  Command: 'decorate
  Sub-Commands: save (params) / load (params) / clean / copy (params)
  Params (save): (none) / (objCategory facetName) / (objCategory) / (facetName) / (customFileName)
  Params (load): (none) / (objCategory facetName) / (objCategory) / (facetName) / (customFileName)
  Params (copy): (sourceFacetName targetFacetName

  Examples:

  #### Save

  'decorate save
  'decorate save doors
  'decorate save felucca
  'decorate save containers trammel

  #### Load

  'decorate load
  'decorate load containers
  'decorate load trammel
  'decorate load lights ilshenar

  #### Clean

  'decorate clean

  #### Copy

  'decorate copy felucca trammel
  deleteChar

  Deletes the targeted player-character.

  Command: 'deleteChar
  Parameters: (target)

  delID

  Deletes ALL items in the world with specified ID.

  Command: 'delID
  Parameters: (h)

  disablespawns

  Disable spawn regions for the specified facet (0 = Felucca, 1 = Trammel, 2 = Ilshenar, 3 = Malas, 4 = Tokuno, 5 = Ter Mur), using facet ID or name.

  Command: 'disablespawns
  Parameters: (facetID / facetName)

  disconnect

  Disconnects player connected to the specified socket.

  Command: 'disconnect
  Parameters: (d)

  dungeonLight

  Sets the default lightlevel for dungeon areas (Day: 0x00. Traditional OSI night: 0x09. Pitch black: 0x1F)

  Command: 'dungeonLight
  Parameters: (d / h)

  dupe

  Duplicates a targeted item either once (if no amount specified) or d times

  Command: 'dupe
  Parameters: (nothing / d) (target)

  dye

  Dyes an item or character the specified colour, or brings up the dye menu if no colour is specified.

  Command: 'dye
  Parameters: (h) (target)

  E
  enablespawns

  Enable spawn regions for the specified facet (0 = Felucca, 1 = Trammel, 2 = Ilshenar, 3 = Malas, 4 = Tokuno, 5 = Ter Mur), using facet ID or name.

  Command: 'enablespawns
  Parameters: (facetID / facetName)

  endFight

  Targeted character (and character being fought) will stop fighting.

  Command: 'endFight
  Parameters: (target)

  F
  findItem

  Find item at specified layer on targeted character.

  Command: 'findItem
  Parameters: (d / h) (target)

  fix

  Attempts to fix incorrect Z coordinates, or teleports character to specified Z.

  Command: 'fix
  Parameters: (nothing) / (h)

  fixSpawn

  Replaces legacy spawner objects that have incorrect item type

  Command: 'fixSpawn

  follow

  Used to specify which player (target 1) an NPC (target 2) should follow when in NPCWANDER-mode 1.

  Command: 'follow
  Parameters: (target 1) > (target 2)

  forceWho

  Brings up an interactive list of online users.

  Command: 'forceWho

  freeze

  Freezes the targeted object to the ground so it cannot be moved/picked up (also see: unfreeze)

  Command: 'freeze
  Parameters: (target)

  fullStats

  Sets all temporary stats (hp, mana, stamina) on targeted character to full.

  Command: 'fullStats
  Parameters: (target)

  G
  gate

  Creates a moongate using the location set on targeted rune.

  Command: 'gate
  Parameters: (target)

  get

  Gets property of targeted object, value displayed in a system message. See set command for a list of properties that can be retrieved using this command.

  Command: 'get
  Parameters: (variable) (target)

  getMulti

  Returns serial of the multi that the targeted object belongs to (is inside), if any.

  Command: 'getMulti
  Parameters: (target)

  gCollect

  Forces "Garbage Collection" routine to delete objects in the deletion queue. May cause unstability when used manually, be careful about using this command on a live server!

  Command: 'gCollect
  Parameters: (nothing)

  getAmmoEffect

  Gets ammoeffect on a bow - the ID of the moving effect that is played when bow is fired at a target. Also see setAmmoEffect command.

  Command: 'getAmmoEffect
  Parameters: (target)

  getAmmoType

  Gets ammotype on a bow - the ID of the items the bow uses as ammo. Also see setAmmoType command.

  Command: 'getAmmoType
  Parameters: (target)

  getLight

  Displays the current ingame lightlevel.

  Command: 'getLight
  Parameters: (nothing)

  getTag

  Retrieves and displays value of the specified tagname from a target, if such a tag has been set. Also see settag.

  Command: 'getTag
  Parameters: (s) (target)

  Example: 'getTag tempTag

  glow

  Gives glowing property to a targeted object.

  Command: 'glow
  Parameters: (target)

  gmMenu

  Opens the specified "Help" menu from menus.dfn.

  Command: 'gmMenu
  Parameters: (d)

  gms

  Displays a list of all online GMs.

  Command: 'gms
  Parameters: (nothing)

  gmYell

  Broadcasts message to all online GMs.

  Command: 'gmYell
  Parameters: (text)

  go

  Teleports you to specified coordinates, or to a specific character based on their serial (in 4 parts) or to a location (place) from locations.dfn.

  Command: 'go
  Parameters: (x y z) / (x y z world) / (x y z world instance) / char (h h h h) / place (d)

  Examples:
  'go 5600 1200 0 0 (teleports you to Green Acres - the expansive, empty, grassy fields in the dungeon/lost lands area of the Felucca map)
  'go 0 0 0 1 (teleports you to the top left corner of the map on Trammel - ocean as far as the eye can see!)
  'go place 1 (Go straight to jail, do not pass go, do not collect 200 gold coins)

  gq

  Opens GM Queue if no parameters are used. next goes to next call in the queue, clear clears the call you are currently on, curr goes to the call you are currently on.

  Command: 'gq
  Parameters: (nothing) / next / clear / curr

  guards

  Enables/Disables town guards globally.

  Command: 'guards
  Parameters: on / off

  gumpMenu

  Opens the specified Gump menu from gumps.dfn.

  Command: 'gumpMenu
  Parameters: (d)

  H
  heal

  Fully heals targeted character.

  Command: 'heal
  Parameters: (target)

  hide

  Permanently hides targeted character. Also see unhide command.

  Command: 'hide
  Parameters: (target)

  houseIcons

  Enables or disables the display of houses as houseicons (deeds) instead of multis.

  Command: 'houseIcons
  Parameters: on / off

  howTo

  Opens a list of commands, with explanations of how to use each specific command.

  Command: 'howTo
  Parameters: (nothing)

  I
  incX

  Increments the X value of target by specified amount (can be a negative number).

  Command: 'incX
  Parameters: (d) (target)

  incY

  Increments the Y value of target by specified amount (can be a negative number).

  Command: 'incY
  Parameters: (d) (target)

  incZ

  Increments the Z value of target by specified amount (can be a negative number).

  Command: 'incZ
  Parameters: (d) (target)

  info

  Displays info about the targeted map tile.

  Command: 'info
  Parameters: (target)

  iStats

  Displays a gump with information on the targeted item.

  Command: 'iStats
  Parameters: (target)

  itemMenu

  Opens specified item-menu.

  Command: 'itemMenu
  Parameters: (d)

  iWipe

  Deletes all items NOT inside the specified area (coordinates or target area if no coordinates specified).

  Command: 'iWipe
  Parameters: (x1 y1 x2 y2) / (nothing) (target)

  J
  jail

  Jails the targeted character for specified amount of time in seconds (defaults to 100000s if no value provided). Also see release command.

  Command: 'jail
  Parameters: (target) / (d) (target)

  K
  kick

  Kicks targeted player off the server.

  Command: 'kick
  Parameters: (target)

  kill

  Kills character, or removes specified item from character.

  Command: 'kill
  Parameters: char (target) / hair (target) / beard (target) / pack (target) / layer (d / h) (target) /

  killAll

  Kills specified percentage of ALL characters in the world, and broadcasts text.

  Command: 'killAll
  Parameters: (d) (text)

  L
  linkDoors

  Link two doors together so that if one is opened, both will open. Also see unLinkDoors command.

  Command: 'linkDoors
  Parameters: (target1) (target2)

  loadDefaults

  Loads the default uox.ini settings.

  Command: 'loadDefaults
  Parameters: (nothing)

  M
  make

  Changes privileges of targeted character to either gm, counselor or player

  Command: 'make
  Parameters: gm (target) / cns (target) / player (target)

  makeShop

  Turns a basic NPC into a shopkeeper, adding in the appropriate layers all the required bags needed for buying and selling items

  Command: 'makeShop
  Parameters: (target)

  mana

  Refills mana of targeted character.

  Command: 'mana
  Parameters: (target)

  mark

  Marks a recall rune at the character's current location.

  Command: 'mark
  Parameters: (target)

  memStats

  Opens a gump displaying useful information on UOX3's memory usage.

  Command: 'memStats
  Parameters: (nothing)

  moveSpeed

  Sets speed of targeted character to specified hex value (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen).

  Command: 'moveSpeed
  Parameters: (h)

  music

  Plays the specified midi/mp3 file. Note that you can only switch what music plays every so often.

  Command: 'music
  Parameters: (d)

  The exact music available is dependent on which UO client version you're using. No matter which version you're using, you will find a file called Config.txt under the [path to UO]\Music\Digital\ subfolder, which lists out the available music, from 0-67 (v5.0.0b to v6.0.1.10?), 0-87 (v7.0.8.2 to v7.0.20.0+) or 0-102 (v7.0.30.1 to v7.0.90.x).

  mineCheck

  Set the server minecheck status to either 0 (everywhere), 1 (only on mountainsides and cave floors) or 2 (miningregions only).

  Command: 'mineCheck
  Parameters: (d)

  moveToBag

  Moves targeted item into your backpack.

  Command: 'moveToBag
  Parameters: (target)

  mute

  Mutes targeted player for specific amount of time, if any. If character is already muted, unmutes.

  Command: 'mute
  Parameters: (target) / (d) (target)

  N
  nAcct

  Account Management. No parameters will open a list of all accounts. Or would, rather, if it was fully implemented. :P

  Command: 'nAcct
  Parameters: (nothing) / add / ban edit / view / list /

  noDecay

  Disables decay for targeted item. Also see decay command.

  Command: 'noDecay
  Parameters: (target)

  npcAction

  Makes targeted character perform specified animation.

  Command: 'npcAction
  Parameters: (d) / (h)

  npcCircle

  Sets bounding circle (x y radius) for targeted NPC.

  Command: 'npcCircle
  Parameters: (d d d)

  npcRect

  Sets bounding box (x1 y1 x2 y2) for targeted NPC.

  Command: 'npcRect
  Parameters: (x1 y1 x2 y2)

  O
  openBank

  Opens targeted player's bank box.

  Command: 'openBank
  Parameters: (target)

  openLayer

  Opens specified layer on character, or the backpack if none specified.

  Command: 'openLayer
  Parameters: (nothing) / (d / h) (target)

  P
  pDump

  Displays some information about UOX3's performance.

  Command: 'pDump
  Parameters: (nothing)

  poly

  Polymorph yourself into specified creature body.

  Command: 'poly
  Parameters: (d) / (h)

  post

  Displays the current bulletin board posting mode for the players.

  Command: 'post
  Parameters: (nothing)

  R
  rAdd

  Adds item of specific hex-id at multiple targeted locations. If another number is provided at end of command, UOX3 will randomize (using number provided) the item being added.

  Command: 'rAdd
  Parameters: (h) (multiple target locations) / (h rndVal) (multiple target locations)

  rAddItem

  Adds item of specified item-id from DFNs at multiple targeted locations. If another number is provided at end of command, UOX3 will randomize (using number provided) the item being added.

  Command: 'rAddItem
  Parameters: (s) (multiple target locations) / (s rndVal) (multiple target locations)

  rAddNpc

  Adds npc of specified npc-id from DFNs at multiple targeted locations.

  Command: 'rAddNpc
  Parameters: (s) (multiple target locations)

  rDye

  Dyes multiple targeted objects with specified color.

  Command: 'rDye
  Parameters: (h) (multiple targets)

  recall

  Teleports your character to the location marked on a targeted rune.

  Command: 'recall
  Parameters: (target)

  refresh

  Teleports character to its current location. Potentially useful for players to refresh screen if encountering any visual glitches.

  Command: 'refresh
  Parameters: (nothing)

  regionInfo

  Get information on current region player is in. Also see xRegionInfo command.

  Command: 'regionInfo
  Parameters: (nothing)

  regSpawn

  Forces either ALL or specified spawnregions to spawn new objects.

  Command: 'regSpawn
  Parameters: (d) / all

  release

  Releases targeted character from jail.

  Command: 'release
  Parameters: (target)

  remove

  Deletes targeted item/NPC (if no parameters provided), or remove all items of a specified itemID from a targeted container.

  Command: 'remove
  Parameters: (target) / (itemID) (target)

  removeShop

  Turns the targeted shopkeeper back into a normal character, removing the specific backpacks used for buying and selling items.

  Command: 'removeShop
  Parameters: (target)

  rename

  Renames targeted object to specified text.

  Command: 'rename
  Parameters: (text) (target)

  reportBug

  Writes out a bugreport to a file.

  Command: 'reportBug
  Parameters: (text)

  resend

  Teleports character to its current location, and resends self to all nearby players.

  Command: 'resend
  Parameters: (nothing)

  respawn

  Forces all spawners in the world to run through a respawn cycle and spawn new objects.

  Command: 'respawn
  Parameters: (nothing)

  restock

  Forces a manual vendor restock. if all is specified, restocks all vendors to maximum. If not, does normal restock.

  Command: 'restock
  Parameters: all / (nothing)

  resurrect

  Resurrects targeted character from the dead.

  Command: 'resurrect
  Parameters: (target)

  rIncX

  Increases X value of multiple targets by specified amount (can be a negative number).

  Command: 'rIncX
  Parameters: (multiple targets)

  rIncY

  Increases Y value of multiple targets by specified amount (can be a negative number).

  Command: 'rIncY
  Parameters: (multiple targets)

  rIncZ

  Increases Z value of multiple targets by specified amount (can be a negative number).

  Command: 'rIncZ
  Parameters: (multiple targets)

  rndTile

  Tiles a random item from [startID] to [endID] of the specified [hue] at the (optional) specified [Z], with an (optional) [movable true/false] state.

  Command: 'rndTile
  Parameters: (d / h) (d / h) (d / h) (z) (true / false) (target location 1) (target location 2)

  Syntax: 'rndTile [startID] [endID] [hue] [z](optional] [movable true/false](optional)
  Examples:
  'rndTile 0x04a9 0x04ac 0 (tiles random wooden floors between target location 1 and 2)
  'rndTile 0x04a9 0x04ac 0x0042 (tiles random green wooden floors between target location 1 and 2)

  rRemove

  Removes multiple targeted items without having to reenter command.

  Command: 'rRemove
  Parameters: (multiple targets)

  rTele

  Lets the player teleport to multiple targeted locations in a row without having to reenter command.

  Command: 'rTele
  Parameters: (multiple target locations)

  rType

  Sets multiple targeted objects to specified type without having to reenter command.

  Command: 'rType
  Parameters: (d) (multiple targets)

  S
  save

  Forces a worldsave.

  Command: 'save
  Parameters: (nothing)

  secondsPerUoMinute

  Sets the number of real-world minutes that pass for each UO minute.

  Command: 'secondsPerUoMinute
  Parameters: (d)

  sell

  Opens the sell-menu of targeted shopkeeper.

  Command: 'sell
  Parameters: (target)

  set

  Sets property of targeted object to specified value.

  Command: 'set
  Parameters: (variable, see below) (target)

  Syntax:

  Base Objects (Characters, Items, Spawners)
  color/colour (h) - Sets the hue of the object.
  dex (d) - Sets dex of targeted character/dex-requirement for wielding targeted item.
  fame (d) - Sets the fame of the object.
  id (h) - Sets the ID (art) of the object.
  int (d) - Sets int of targeted character/int-requirement for wielding targeted item.
  karma (d) - Sets the karma of the object.
  kills (d) - Sets the number of kills of the object.
  name (s) - Sets the name of the object.
  owner (target x 2) - Sets the owner of the object.
  str (d) - Sets str of targeted character/str-requirement for wielding targeted item.
  tempdex (d) - Debug command to fix erroneous dexterity bonus on a character
  tempint (d) - Debug command to fix erroneous intelligence bonus on a character
  tempstr (d) - Debug command to fix erroneous strength bonus on a character
  visible (d) - Sets the visibility level of the object (0=Visible, 1=Hidden, 2=Magically Invisible, 3=Visible to GMs only).
  x (d) - Sets the X coordinate of the object.
  y (d) - Sets the Y coordinate of the object.
  z (d) - Sets the Z coordinate of the object.

  Characters
  advobj (d) - Sets the advancement type the character has used.
  allskills (d) - Sets all of the character's skills to specified value.
  armor/armour (d) - Set the (physical) armour level of the character.
  ac/armorclass/armourclass (d) - Set the AC/armour class of the item. Can be used to set race-restrictions for which items can be equipped, or to identify armours as cloth vs leather vs plate, etc.
  dir (d) - Sets the direction of a character, or lightradius of a lightsource-item.
  cantrain (d) - Toggle NPC's ability to train PCs (0 = false, 1 = true)
  commandlevel (d) - Sets the commandlevel of the targeted player.
  font (d) - Sets the speech font type of the character.
  frozen (d) - Toggles characters ability to move (0 = not frozen, 1 = frozen)
  hunger (d) - Sets the current hunger level of the targeted character (0 = max hungry, 6 = full, not hungry)
  invulnerable (d) - Toggles the character's invulnerability (0 = false, 1 = true)
  language (d) - Sets the (socket) language for a player, which determines which language UOX3 uses when sending dictionary messages to said player.
  maxhp (d) - Sets the maximum HP of the character.
  maxmana (d) - Sets the maximum MANA of the character.
  maxstamina (d) - Sets the maximum STAMINA of the character.
  npcai (d) - Sets the NPCAI type of the character
  npcwander (d) - Sets the NPCWander mode of the character (0 = none, 1 = follow, 2 = free, 3 = box, 4 = circle)
  orgskin (h) - Sets the original skin of the character.
  poison (d) - Sets the poison strength of the character.
  [skillname] (d) - Sets the specified skillpoints for specified skillname.
  spattack (d) - Sets the SPAttack value of the character - the maximum spell circle from which an NPC will cast spells in combat.
  spdelay (d) - Sets the SPDelay value of the character - the minimum number of seconds between each time an NPC will cast spells in combat.
  split (d) - Amount of creatures an NPC can split into (if script 3203 is attached).
  splitchance (d) - Chance of NPC splitting when hit.
  title (s) - Sets the title of the character.
  totame (d) - Sets the skill required to tame a creature.
  toprov (d) - Sets the skill required to provoce a creature.
  topeace (d) - Sets the skill required to peacemaking a creature.
  vulnerable (d) - Makes a creature vulnerable or not (0=invulnerable, 1=vulnerable).

  Characters (Account properties)
  comment (d) - Sets comment/contact info (such as an e-mail address) of account
  isBanned (d) - Toggles whether account is banned (0 = false, 1 = true)
  isSuspended (d) -Toggles whether account is suspended (0 = false, 1 = true)
  isPublic (d) - Toggles whether account contact/comment details are public (0 = false, 1 = true)
  isSlot1Blocked (d) - Toggles whether character slot 1 is blocked on account (0 = false, 1 = true)
  isSlot2Blocked (d) - Toggles whether character slot 2 is blocked on account (0 = false, 1 = true)
  isSlot3Blocked (d) - Toggles whether character slot 3 is blocked on account (0 = false, 1 = true)
  isSlot4Blocked (d) - Toggles whether character slot 4 is blocked on account (0 = false, 1 = true)
  isSlot5Blocked (d) - Toggles whether character slot 5 is blocked on account (0 = false, 1 = true)
  isSlot6Blocked (d) - Toggles whether character slot 6 is blocked on account (0 = false, 1 = true)
  isSlot7Blocked (d) - Toggles whether character slot 7 is blocked on account (0 = false, 1 = true)
  unused9 (d) - Toggles unused9 flag (0 = false, 1 = true)
  unused10 (d) - Toggles unused10 flag (0 = false, 1 = true)
  isSeer (d) - Toggles whether account is marked as Seer account (0 = false, 1 = true)
  isCounselor (d) - Toggles whether account is marked as Counselor account (0 = false, 1 = true)
  isGM (d) - Toggles whether account is marked as GM account (0 = false, 1 = true)
  timeban (d) - Sets ban duration for account in minutes
  (Read-Only properties, fetch with 'get command) - character1, character2, character3, character4, character5, character6, character7, currentChar, flags, id, isonline, lastip, username

  Items
  amount (d) - Sets the amount in a pile of items.
  buyvalue (d) - Sets item buy value.
  decayable (d) - Toggles item's decay status (0 = not decayable, 1 = decayable)
  desc (d) - Sets the item description (as displayed on tooltips, on player vendors)
  def (d) - Sets the item's physical resist/armor rating.
  devinelock (d) - Toggles item's devine lock status (0 = not locked, 1 = locked)
  hidamage (d) - Sets the maximum amount of damage done with a weapon.
  layer (d) - Sets the layer this item will be equipped at.
  lodamage (d) - Sets the minimum amount of damage done with a weapon.
  more (h) - Sets item's "more" value.
  morex (h) - Sets item's "morex" value.
  morey (h) - Sets item's "morey" value.
  morez (h) - Sets item's "morez" value.
  morexyz (h h h) - Sets item's morex, morey and morez values.
  movable (d) - Toggles items ability to be moved (0 = default, 1 = movable, 2 = not movable, 3 = locked down)
  name2 (s) - Sets items name2 value (used for magical items and Item-ID, for naming corpses, and body parts).
  newbie (target) - Makes targeted item a newbie/blessed item.
  poison (d) - Sets the poison strength applied to an item (weapon, food).
  restock (d) - Sets amount of a targeted item to restock on a shopkeeper.
  sellvalue (d) - Sets item sell value
  type (d) - Sets item's TYPE.
  weight (d) - Sets an item's weight (100 = 1.00 stone)
  wipable (d) - Toggles items wipeable status (0 = false, 1 = true)

  Spawners
  spawnsection (s) - Sets the script section for spawner to pull data from.
  mininterval (d) - Sets the minimum spawn interval.
  maxinterval (d) - Sets the maximum spawn interval.

  setAmmoEffect

  Sets ammoeffect on a bow - the ID of the moving effect that is played when bow is fired at a target. Also see getAmmoEffect command.

  Command: 'setAmmoEffect
  Parameters: (h) (target)

  setAmmoType

  Sets ammotype on a bow - the ID of the items the bow uses as ammo. Also see getAmmoType command.

  Command: 'setAmmoType
  Parameters: (h) (target)

  setPoisoned

  Sets the level of poison a character is infected with.

  0 - not poisoned
  1 - lesser poison
  2 - poison
  3 - greater poison
  4 - deadly poison

  Command: 'setPoisoned
  Parameters: (d)

  setPost

  Sets your bulletin board posting type.

  global - makes your next post appear in all bulletin boards.
  regional - makes your next post appear in all bulletin boards in your current region.
  local - makes your next post appear only on the next bulletin board you use.

  Command: 'setPost
  Parameters: global / regional / local

  setRace

  Sets your character's race to specified raceid.

  Command: 'setRace
  Parameters: (d)

  setScpTrig

  Assigns specified scriptID to targeted object.

  Command: 'setScpTrig
  Parameters: (d)

  setShopRestockRate

  Sets the restock rate of all shops in the world (in minutes)

  Command: 'setShopRestockRate
  Parameters: (d)

  setTag

  Used to assign a value to a specified tag on a targeted object.

  Command: 'setTag
  Parameters: (s) (d)

  setTime

  Sets the current UO time in hours and minutes.

  Command: 'setTime
  Parameters: (d d)

  sfx

  Plays the specified sound effect.

  Command: 'sfx
  Parameters: (d)

  showDetail

  Displays type info for targeted dynamic item.

  Command: 'showDetail
  Parameters: (target)

  showIDs

  Display the serial number of every character on screen.

  Command: 'showIDs
  Parameters: (nothing)

  showSkills

  Opens a gump displaying the skills of targeted character.

  If parameter is 0, will use base skill and display only those skills greater than 0.
  If 1, will use base skill and display all skills.
  If 2, will use actual skill and display only those skills greater than 0.
  If 3, will use actual skill and display all skills.

  Command: 'showSkills
  Parameters: (d)

  showTime

  Displays the current UO time.

  Command: 'showTime
  Parameters: (nothing)

  shutdown

  Initiates server shutdown sequence in d minutes.

  Command: 'shutdown
  Parameters: (d)

  skin

  Changes the hue of your character's skin to specified color.

  Command: 'skin
  Parameters: (d) / (h)

  spawnKill

  Kills all characters spawned by specified spawnregion.

  Command: 'spawnKill
  Parameters: (d)

  squelch

  Same as Mute command; it "squelches" (mutes) targeted character either indefinitely or for a specified amount of seconds.

  Command: 'squelch
  Parameters: (target) / (d) (target)

  stamina

  Rejuvinates targeted character's stamina to full.

  Command: 'stamina
  Parameters: (target)

  status

  Opens the HTML status information gump.

  Command: 'status
  Parameters: (nothing)

  T
  tele

  Teleports you to the targeted location.

  Command: 'tele
  Parameters: (target)

  teleStuff

  Moves targeted object to targeted location.

  Command: 'teleStuff
  Parameters: (target1) (target2)

  tell

  Sends a message to the user logged into the specified socket slot.

  Command: 'tell
  Parameters: (d) (text)

  temp

  Displays the current temperature.

  Command: 'temp
  Parameters: (nothing)

  tile

  Tiles the specified item over a targeted area. If coordinates are specified(x1 x2 y1 y2 z), will tile the item inside those coordinates, at specified Z height. If another number is provided at end of command, UOX3 will randomize (using provided number) the item being tiled

  Command: 'tile
  Parameters: (h) (target1) (target2) / (h rndVal) (target1) (target2) / (h x1 x2 y1 y2 z) / (h x1 x2 y1 y2 z rndVal)

  time

  Displays the current in-game time.

  Command: 'time
  Parameters: (nothing)

  travel

  Shortcut for opening itemMenu 6000 - which is the GM Travel-menu.

  Command: 'travel
  Parameters: (nothing)

  tweak

  Opens the tweak menu allowing you to modify many settings on the targeted object. Objects that can be tweaked: Items, Spawners, Characters, Accounts (via Character tweak), Skills (via Character tweak), Multis, Regions (by targeting ground),

  Command: 'tweak
  Parameters: (target)

  U
  undress

  Character will completely undress all equipped items.

  Command: 'undress
  Parameters: (nothing)

  unfreeze

  Allows targeted object to move/be moved. Also see freeze command.

  Command: 'unfreeze
  Parameters: (target)

  unglow

  Removes the glowing attribute from an object which has it. Also see glow command.

  Command: 'unglow
  Parameters: (target)

  unhide

  Shows a player who has previously been permanently hidden. Also see hide command.

  Command: 'unhide
  Parameters: (target)

  V
  validCmd

  Displays all valid commands for your character.

  Command: 'validCmd
  Parameters: (nothing)

  W
  where

  Displays your current x, y, z coordinates as well as world number and instance ID.

  Command: 'where
  Parameters: (nothing)

  who

  Displays a list of all online players, what slot they're connected to, and their serial number.

  Command: 'who
  Parameters: (nothing)

  whoList

  Displays a gump of all online (if no parameter) or offline (if OFF) players on your shard.

  Command: 'whoList
  Parameters: off / (nothing)

  wipe

  Wipes items inside specified area, or everything in the game world of specific type. If no parameters are provided, area can be chosen with targeting cursors.

  Command: 'wipe
  Parameters: (nothing) (target1) (target2) / (x1 y1 x2 y2) / all / items / npcs

  wStats

  Displays information on an NPC's wander mode.

  Command: 'wStats
  Parameters: (target)

  X
  xTeleport

  If you specify a single number, teleports player logged into that slot to you. If you specify nothing it brings up targeting cursor to target object to tele to you. If you specify a serial number, teleports player wih that serial to you.

  Command: 'xTeleport
  Parameters: (d) / (nothing) / (h h h h)

  xGate

  Opens a gate to a specified location from locations.dfn

  Command: 'xGate
  Parameters: (d)

  xGo

  Sends targeted player to specified location from location.dfn, or to a specific set of coordinates with optional world and instance parameters.

  Command: 'xGo
  Parameters: (d) / (x y z) / (x y z world) / (x y z world instance)

  xRegionInfo

  Get information on current region a target character is in. Also see regionInfo command.

  Command: 'xRegionInfo
  Parameters: (target)

  xSay

  Makes targeted character/item say specified text.

  Command: 'xSay
  Parameters: (text) (target)

  Y
  yell

  Broadcasts text to all players online with command level of 0 and above.

  Command: 'yell
  Parameters: (text)

  Example: 'yell Hello all players!

  Z
  zeroKills

  Resets all players' kills back to 0.

  Command: 'zeroKills
  Parameters: (nothing)

- Console Command List

  The UOX3 server console provides some useful commands for shard admins that can be executed locally without logging onto the shard with a client. These commands can be executed with shortcut keys after the console has been unlocked by pressing the * key on your keyboard. Note that the shortcut keys below are not case-sensitive.

  ShardOP

  * - Locks/Unlocks Console.

  ? - Displays console command list.

  C - Displays some basic server setting information.

  Y - Console broadcast. Will broadcast a system message entered in console, to all online players.

  Load Commands

  1 - Reloads uox.ini.

  2 - Reload user accounts to import new accounts added to newaccounts.adm

  3 - Reload regions from regions.dfn.

  4 - Reload spawn regions from spawn.dfn.

  5 - Reload spells from spells.dfn.

  6 - Reload commands.

  7 - Reload all DFN files.

  8 - Reload all JavaScripts.

  9 - Reload HTML Templates.

  0 - Reload everything that can be reloaded.

  Save Commands

  ! - Save account data. Normally done during world saves.

  @ - Save world data, and import new accounts added to newaccounts.adm.

  Server Maintenance

  P - Display performance dump with details about server performance.

  W - Display list of players currently online.

  M - Display information about UOX3's memory usage.

  T - Schedule a server shutdown in 10 minutes, with in-game announcement.

  F - Dump information about DFN Priority Maps to file in root UOX3 folder.

  Network Maintenance

  D - Disconnect player connected to first socket connection on server.

  K - Disconnect ALL players.

  Z - Disable network logging.

- Item Types

  This contains a list of item types supported by UOX3. Item types are assigned to items and essentially tells UOX3 what should happen when these items are double-clicked, or targeted. Item type can be set via the item DFNs, via JS, or with the set type # GM command.

  List of Item Types

  The IT_[NAME] descriptions below are used in the source code to reference the various item types, and is included here for visibility. Use the numeric values when setting item types via command, DFN or script.

  0 - IT_NOTYPE
  No item type specified.

  1 - IT_CONTAINER
  Container. Can be trapped by setting MOREZ property to a value of 0x01320000, which marks the container as trapped (01), sets damage to deal to 50 (hex: 32), and will trigger Magic Trap spell if someone opens it. Bank-boxes have a MOREX of 1.

  2 - IT_CASTLEGATEOPENER
  Causes linked IT_CASTLEGATE object to open. Link to castle gate established via storing item serial of gate on opener's MORE property.

  3 - IT_CASTLEGATE
  Castle gate, raised/lowered by interacting with IT_CASTLEGATE object

  6 - IT_TELEPORTITEM
  Teleporter item/rune. When used, allows player to choose where to teleport to. Triggered via jse_typeassociations.scp and js/item/teleportrune.js

  7 - IT_KEY
  Keys are used to lock/unlock objects with locks (doors, containers) that share an identical MORE property value with the key. For example, if both a key and a door have been given the same MORE value of 1, that door can be locked/unlocked with the key. the same MORE property value as the key. To ensure unique setup of keys and locks, use a unique MORE value such as the SERIAL of the key or the lock.

  8 - IT_LOCKEDCONTAINER
  Locked container. Can be trapped by setting MOREZ property to 1, which will trigger Magic Trap spell if someone opens it. Turns into IT_CONTAINER (1) if unlocked.

  9 - IT_SPELLBOOK
  Spellbook. Empty by default, drop magic scrolls on it to add spells to the spellbook.

  10 - IT_MAP
  Opens an in-game world map, where a course can be plotted.

  11 - IT_BOOK
  Used to setup books that are writeable by players and/or readable only. Use 'set morex 666 to make a writeable book, and 'set morez 32 to give it 32 pages. Once the page has been opened (and created, server side), it is no longer possible to adjust the amount of pages it contains. Also note that each page can only hold 8 lines of text.

  To convert a book with text already written in it to readable only, change MOREX to 999. Be vary of giving writeable books too many pages, as entire book is sent each time a writeable book is opened, or changed.

  12 - IT_DOOR
  Unlocked door. Can be locked using a key with a matching MORE value, after which the item type will change to 13 - IT_LOCKEDDOOR.

  13 - IT_LOCKEDDOOR
  Locked door. Can be unlocked using a key with a matching MORE value, after which the item type will change to 12 - IT_DOOR.

  14 - IT_FOOD
  Food that can be eaten by double-clicking the item. Some can also be used to feed pets, based on the individual pet's list of acceptable foods, defined using the NPC DFN tag food, which links to foodlists in dfndata/items/itemlists/foodlists.dfn

  15 - IT_MAGICWAND
  Players can use magic wands to cast spells without requiring magery skills, simply by double-clicking the wand. Use 'set morex # to set the spell circle, 'set morey # to set the spell number within circle, and 'set morez # to set the amount of charges in the magic wand.

  16 - IT_RESURRECTOBJECT
  Resurrection objects will resurrect dead player characters when the object is double-clicked.

  17 - IT_CRYSTALBALL
  Unused item type.

  18 - IT_POTION
  Magic potion. Type of potion is determined by MOREX value, while MOREZ determines the potion strength, which ranges from 1-4 depending on the type of potion.

  Agility - MOREX 1, MOREZ 1 (Normal) or 2 (Greater)

  Cure - MOREX 2, MOREZ 1 (Lesser), 2 (Normal) or 3 (Greater)

  Explosion - MOREX 3, MOREZ 1 (Lesser), 2 (Normal) or 3 (Greater)

  Heal - MOREX 4, MOREZ 1 (Lesser), 2 (Normal) or 3 (Greater)

  Night Sight - MOREX 5, MOREZ unused

  Poison - MOREX 6, MOREZ 1 (Lesser), 2 (Normal), 3 (Greater) or 4 (Deadly)

  Refresh - MOREX 7, MOREZ 1 (Lesser) or 2 (Normal)

  Strength - MOREX 8, MOREZ 1 (Normal) or 2 (Greater)

  Mana - MOREX 9, MOREZ 1 (Normal) or 2 (Greater)

  19 - IT_TRADEWINDOW
  Container type used for secure trading between players. When players trade items via the secure trade window, the items temporarily go into a container with this item type.

  35 - IT_TOWNSTONE
  Townstone Deed if itemID equals 0x14F0, otherwise it's an actual Townstone. See separate feature documentation for more info.

  50 - IT_RECALLRUNE
  Recall rune, used along with the Mark, Recall and Gate spells. Marked location can be set manually using 'set morex # (X coordinate), 'set morey # (Y coordinate), 'set morez # (Z coordinate) and 'set more # (worldnumber).

  51 - IT_GATE
  When a player steps into a gate, they are teleported to another gate's location. The gates are either spawned automatically when using the Gate spell, but can also be setup manually (and permanently) by linking two separate gate objects together by setting their MORE values to the other gate's serial.

  60 - IT_OBJTELEPORTER
  Object teleporters are similar to gates (IT_GATE), with the primary difference of being one-way teleporters instead of two-way like gates. Teleport location can be set using 'set morex # (X coordinate), 'set morey # (Y coordinate) and 'set morez # (Z coordinate). Players can trigger the teleporter by walking onto it, or by double-clicking it.

  61 - IT_ITEMSPAWNER
  Item spawner object that will spawn - at the item spawner's location - a specified item or list of items ('set spawnsection itemSectionID/itemListID) at a given, randomized interval ('set mininterval # and 'set maxinterval #). Spawner object must be added using 'add spawner # instead of 'add item # command, or it won't work!

  DFN Tags: spawnobj, spawnobjlist, amount, interval

  62 - IT_NPCSPAWNER
  Like item spawners, NPC spawners are objects that will spawn a specified NPC or list of NPCs ('set spawnsection npcSectionID/npcListID) at a given, randomized interval ('set mininterval # and 'set maxinterval #) with the amount of NPCs to spawn ('set amount #'). Spawner object must be added using 'add spawner # instead of 'add item # command, or it won't work!

  DFN Tags: spawnobj, spawnobjlist, amount, interval

  63 - IT_SPAWNCONT
  Item Spawner (Container). A container added as a spawner that can spawn an item inside the container at random intervals ('set mininterval # and 'set maxinterval #), based on an itemSectionID ('set spawnsection itemSectionID) or an itemList ('set spawnsection itemListID). Each time a new item spawns inside, the item type of the spawner changes to 64 - IT_LOCKEDSPAWNCONT! Can be trapped by setting MOREZ property to a value of 0x01320000, which marks the container as trapped (01), sets damage to deal to 50 (hex: 32), and will trigger Magic Trap spell if someone opens it. See Spawn Objects feature info for more details and examples on how to set these up in DFNs.

  DFN Tags: spawnobj, spawnobjlist, amount, interval, morez

  64 - IT_LOCKEDSPAWNCONT
  When a spawn container of type IT_SPAWNCONT spawns an item inside the container, the item type changes to IT_LOCKEDSPAWNCONT, locking the container. This lock can be opened using the Picklocking skill or the Magic Unlock spell - at which point it will return to type IT_SPAWNCONT until another item has spawned. Can be trapped by setting MOREZ property to a value of 0x01320000, which marks the container as trapped (01), sets damage to deal to 50 (hex: 32), and will trigger Magic Trap spell if someone opens it. See Spawn Objects feature info for more details and examples on how to set these up in DFNs.

  DFN Tags: spawnobj, spawnobjlist, amount, interval, morez

  65 - IT_UNLOCKABLESPAWNCONT
  Similar to IT_SPAWNCONT spawn containers, except this won't automatically lock itself when a new item is spawned. Can be trapped by setting MOREZ property to a value of 0x01320000, which marks the container as trapped (01), sets damage to deal to 50 (hex: 32), and will trigger Magic Trap spell if someone opens it. See Spawn Objects feature info for more details and examples on how to set these up in DFNs.

  DFN Tags: spawnobj, spawnobjlist, amount, interval, morez

  69 - IT_AREASPAWNER
  Same setup as IT_NPCSPAWNER, but with the addition of offsets for X and Y location to allow spawner to spawn the NPCs randomly in an area instead of directly on top of the spawner object. To set those offsets, use 'set more 0 0 # #' (or 'set more 0x00 0x00 0x## 0x##) where the last two digits represents the X and Y offsets, i.e. how far away from the spawn object in X direction and Y direction can NPCs spawn.

  Note: If the NPCs being spawned are setup with an NPCWander type of 3 or 4, make sure that the FX1, FY1 and FZ1 DFN tags for the NPC is set to -1. This is their default value, if not otherwise specified. This way, the NPC will use the spawn location coordinates as center point for their wandering, and they will stick within the range defined in FX2.

  80 - IT_ADVANCEGATE
  Single-use Advancement Gate. Setting MOREX value determines which section of UOX3/dfndata/advance/advance.dfn to apply when player steps through.

  81 - IT_MULTIADVANCEGATE
  Multi-use Advancement Gate. Setting MOREX value determines which section of UOX3/dfndata/advance/advance.dfn to apply when player steps through.

  82 - IT_MONSTERGATE
  Items of type 82 are Monster Gates, that transform player characters into NPCs when they step onto the same tile as the monster gate item. Use 'set desc npcSectionID to set the type of NPC characters will transform into!

  83 - IT_RACEGATE
  Race Gate objects are similar to Monster Gates in that they transform players who step through the gate/collide with the object. However, instead of transforming the player to a monster, this changes the character's race! Simply use 'set morex # where # is a race ID from UOX3/dfndata/race/races.dfn. Additionally, set the MOREY property to 1 to allow players to make use of the race gate more than once, or 0 to make it single-use only.

  85 - IT_DAMAGEOBJECT
  Damage objects applies damage to the character using or colliding with them. Set the base damage dealt using the MOREX item property/tag, and add a random amount of damage on top of that using MOREY and MOREZ properties/tags. Useful for traps in dungeons!

  87 - IT_TRASHCONT
  By assigning type 87 to a container, you turn it into a trash container that instantly disposes/deletes any item dropped onto it, indiscriminately. For an alternative with many additional options, check out the trashbarrel script in UOX3/js/server/house/trashbarrel.js

  88 - IT_SOUNDOBJECT
  Plays a sound effect whenever a player comes within range. Specify which SFX to play using 'set morex soundID, the range at which the sound effect will trigger using 'set morey radiusInTiles, and the probability of the sound playing, in %.

  89 - IT_MAPCHANGEOBJECT
  Map change objects can be used to teleport to another map/world on the server, like from Felucca to Trammel, or vice versa. To specify which world to travel to, use 'set more worldNum.

  90 - IT_WORLDCHANGEGATE
  World Change Gates can display the world with different season visuals for players, based on the value of the MOREX property set on the gate object. Available MOREX values: 0 - Spring, 1 - Summer, 2 - Fall, 3 - Winter, 4 - Desolation

  101 - IT_MORPHOBJECT
  Morph objects allow players that use them to polymorph into a specified creature, based on the bodyID set in the morph object's MOREX property (Example: 'set morex 0x0011 to morph into an orc). Once the object is used, the item type changes to 102 - IT_UNMORPHOBJECT.

  102 - IT_UNMORPHOBJECT
  Using an unmorph object will reverse the effects of a previously used morph object, and return a player's body back to its original state. Once the object is used, the item type changes to 101 - IT_MORPHOBJECT.

  105 - IT_DRINK
  Items with the item type 105 are considered drinkable objects. Usage handled in JS (UOX3/js/server/resource/pitchers.js).

  106 - IT_STANDINGHARP
  Musical instrument for music-related skills. Usage handled in JS (UOX3/js/skill/musicianship.js).

  111 - IT_ZEROKILLSGATE
  If a player steps through/onto a "Zero Kills Gate", their murder count gets reset to zero. No other configuration is required for this object.

  117 - IT_PLANK
  Planks are automatically added to boats upon creation, and are used for boarding/disembarking. Can be locked using boat key.

  118 - IT_FIREWORKSWAND
  Fireworks wand. Will display fireworks effects on screen upon use. Amount of charges can be set via the object's MOREX property.

  125 - IT_ESCORTNPCSPAWNER
  Escort NPC spawner used to spawn NPCs for escort quests. Same setup as IT_NPCSPAWNER, but with the addition of offsets for X and Y location to allow spawner to spawn the NPCs randomly in an area instead of directly on top of the spawner object. To set those offsets, use 'set more 0 0 # #' where the last two digits represents the X and Y offsets, i.e. how far away from the spawn object in X direction and Y direction can NPCs spawn.

  Note: If the NPCs being spawned are setup with an NPCWander type of 3 or 4, make sure that the FX1, FY1 and FZ1 DFN tags for the NPC is set to -1. This is their default value, if not otherwise specified. This way, the NPC will use the spawn location coordinates as center point for their wandering, and they will stick within the range defined in FX2.

  These spawners are only active if the NPC escort quests have been enabled in uox.ini via the ESCORTENABLED setting. Every time a quest NPC spawns, any message boards setup to show escort quests will get a new post.

  186 - IT_RENAMEDEED
  Rename Deed. Lets the player who uses it enter a new name for their character. After use, the rename deed is deleted.

  190 - IT_LEATHERREPAIRTOOL
  Leather Repair Tool. Setting an item to this item type marks it as a tool that can be used to repair the durability of a piece of leather armor that has lost hitpoints in combat.

  191 - IT_BOWREPAIRTOOL
  Bow Repair Tool. Setting an item to this item type marks it as a tool that can be used to repair the durability of bows and crossbows that have lost hitpoints in combat.

  200 - IT_TILLER
  Tillerman. Automatically assigned to the tillerman on board boats upon creation of those boats.

  201 - IT_HOUSEADDON
  House Addon. Upon using an item (usually a deed) marked with this item type while inside a house owned or co-owned by the player, they are asked to select a location where they'd like to place the house addon associated with the item used.

  202 - IT_GUILDSTONE
  If itemID of object with this type is 0x14F0, it's a guildstone deed. If it's 0x1869, it's a guildstone that has already been placed. In deed-form, using the object will place a new guildstone at the player's location.

  203 - IT_HOUSESIGN
  House sign! This item type is automatically assigned to house signs added when placing new player houses. When used, it will bring up a house gump/menu with contents depending on the player's ownership status/access level with the house. Note: The serial of the house will be stored in the sign's MORE property, while the sign's serial will be stored in the house's MORE property.

  204 - IT_TINKERTOOL
  Tinker Tool. Required by the Tinkerer profession to craft items.

  205 - IT_METALREPAIRTOOL
  Metal Repair Tool. Allows players to repair durability of metal armours and weapons that have lost hitpoints in combat.

  207 - IT_FORGE
  Forge. Can be used to smelt ore into ingots.

  208 - IT_DYE
  Dye. When used, will change the colour of a targeted dye tub/vat to match the colour of the dye object.

  209 - IT_DYEVAT
  Dye tub/vat. When used, can apply the colour contained in the dye tub to targeted cloth, clothing and some armours.

  210 - IT_MODELMULTI
  The boat equivalent of a house deed! When player's pack up a boat, they receive this item in their inventory, which can then be used to deploy the boat when needed.

  211 - IT_ARCHERYBUTTE
  Archery Butte! Can be used to practice Archery skill early on by holding a bow/crossbow with appropriate ammunition in the backpack, then double-clicking the archery butte from a good distance away (~7 tiles). Usage handled in JS (UOX3/js/item/archerybutte.js).

  212 - IT_DRUM
  Musical instrument for music-related skills. Usage handled in JS (UOX3/js/skill/musicianship.js).

  213 - IT_TAMBOURINE
  Musical instrument for music-related skills. Usage handled in JS (UOX3/js/skill/musicianship.js).

  214 - IT_HARP
  Musical instrument for music-related skills. Usage handled in JS (UOX3/js/skill/musicianship.js).

  215 - IT_LUTE
  Musical instrument for music-related skills. Usage handled in JS (UOX3/js/skill/musicianship.js).

  216 - IT_AXE
  Axe. Apart from being used in combat, it can also be used to chop things, like trees, house addons, create resources for fletching, etc. Usage handled in JS (UOX3/js/item/axe.js).

  217 - IT_PLAYERVENDORDEED
  Player vendor deed. Can be used to place a player vendor in a house owned by the player, who can sell the player's items to other players even when not online.

  218 - IT_SMITHYTOOL
  Smithing tool. Required by the Blacksmithing profession to craft items.

  219 - IT_CARPENTRYTOOL
  Carpentry tool. Required by the Carpentry profession to craft items.

  220 - IT_MININGTOOL
  Mining tool. Required by the Mining profession to mine ore.

  221 - IT_EMPTYVIAL
  Empty vial. Can be used on corpses to create reagents for necromancy!

  222 - IT_UNSPUNFABRIC
  Unspun wool. Can be spun into balls of yarn used by the Tailoring profession using a spinning wheel.

  223 - IT_UNCOOKEDFISH
  Uncooked fish. Can be fed to pets who like that type of food, or cooked on a campfire or in an oven to create cooked fish.

  224 - IT_UNCOOKEDMEAT
  Uncooked meat. Can be fed to pets who like that type of food, or cooked on a campfire or in an oven to create cooked meat.

  225 - IT_SPUNFABRIC
  Spun wool. Can be woven into cloth by the Tailoring profession using a loom.

  226 - IT_FLETCHINGTOOL
  Fletching tool. Required by the Fletching profession to create bows and arrows.

  227 - IT_CANNONBALL
  Unused item type.

  228 - IT_WATERPITCHER
  Water pitcher. Can be filled with liquids like water, ale, wine. Can be used to pour liquids into other containers like bottles, glasses, mugs, etc. When filled with water, also used by the Cooking profession to create stuff like dough.

  229 - IT_UNCOOKEDDOUGH
  Unused item type.

  230 - IT_SEWINGKIT
  Sewing kit. Can be used by the Tailoring profession to craft various types of clothes.

  231 - IT_ORE
  Ore. Item type is applied to ore mined from the ground. Can be combined with other ore items, or smelted on a forge.

  232 - IT_MESSAGEBOARD
  Message board. Can be used by players to post in-game messages for other players to read. Can also be used by NPC escort quest system to post automatic notices when there are quest NPCs awaiting escorts somewhere.

  233 - IT_SWORD
  Sword/Bladed weapon. Can be used for a variety of purposes like cutting fish into fish steaks, carving meat from corpses, crafting bows from logs, make kindling, etc.

  234 - IT_CAMPING
  Kindling. Used with Camping skill to create a campfire, which can be used to cook food or instantly log out in the wilderness when used along with a sleeping bag.

  235 - IT_MAGICSTATUE
  Magic statue. Drops axe if player passes Item Identification skill-check.

  236 - IT_GUILLOTINE
  Guillotine. Plays an animation if player passes Item Identification skill-check.

  238 - IT_FLOURSACK
  Sack of flour. Used by Cooking profession to create various baked goods. Turns into open sack of flour when used.

  239 - IT_OPENFLOURSACK
  Open Sack of flour. Used by Cooking profession to create various baked goods.

  240 - IT_FISHINGPOLE
  Fishing pole. Used by the Fishing profession to fish.

  241 - IT_CLOCK
  It's a clock. It shows the time.

  242 - IT_MORTAR
  Mortar and pestle. Used by Alchemy profession to grind magical reagents into potions!

  243 - IT_SCISSORS
  Scissors. Can be used to cut bolts of cloth into cut cloth, cut folded or cut cloth (or clothes!) into bandages, cut hides into leather, or to shear wool from sheep!

  244 - IT_BANDAGE
  Bandage. Can be used with the Healing skill to heal injured characters. Can be created by cutting up cloth using scissors!

  245 - IT_SEXTANT
  Sextant. Usable by anyone to display their in-game coordinates in the world.

  246 - IT_HAIRDYE
  Hair dye. When used, will bring up a gump menu with various colour choices, which the player can apply to their hair.

  247 - IT_LOCKPICK
  Lockpick. Can be used by characters with the Lockpicking profession to unlock locked doors and containers, if these are not associated with a player house. Consumed on use.

  248 - IT_COTTONPLANT
  Cotton plant. Can be harvested by anyone for cotton. Once harvested, requires some time to regrow.

  249 - IT_TINKERAXLE
  Axles and gears. Can be combined with one another by the Tinkerer profession to create Axle with Gears, needed for more advanced Tinkering. Consumed on use.

  250 - IT_TINKERAWG
  Various springs, bolts and misc items used by the Tinkerer profession to craft parts needed for more advanced Tinkering. Consumed on use.

  251 - IT_TINKERCLOCK
  Clock parts. Can be combined with other clock parts by the Tinkerer profession to create clocks to show the current in-game time. Consumed on use.

  252 - IT_TINKERSEXTANT
  Sextant parts. Usable by Tinkerer profession to create sextants. Consumed on use.

  253 - IT_TRAININGDUMMY
  Training dummy. Can be used to practice the Tactics combat skill up until player reaches 25.0 skillpoints in that skill.

  255 - IT_COUNT
  The final item type in the list, and the one type that serves no gameplay function. However, it is used by various tools to identify items to "freeze" into the statics files.

- Item Layers

  This is a list of item layers supported by UOX3. Item layers says something about where items will ideally be equipped on a character, though this can also be dependent on what the client allows or not. Item layers can be set via item DFNs, JS or with the 'set layer # GM command.

  List of Item Layers
  Layer 0 / 0x00 - None
  Layer 1 / 0x01 - (Right Hand) Single-Hand item/weapon
  Layer 2 / 0x02 - (Left Hand) Two-Hand item/weapon (including Shield)
  Layer 3 / 0x03 - Footwear/Foot Covering/Armor
  Layer 4 / 0x04 - Leg Covering (including Pants, Shorts, Bone/Chain/Ring legs)
  Layer 5 / 0x05 - Chest Clothing/Female Chest Armor
  Layer 6 / 0x06 - Head Covering/Helmet
  Layer 7 / 0x07 - Hand Covering/Armor
  Layer 8 / 0x08 - Ring
  Layer 9 / 0x09 - Talisman
  Layer 10 / 0x0A - Neck Covering/Armor
  Layer 11 / 0x0B - Hair
  Layer 12 / 0x0C - Waist (Half-Apron)
  Layer 13 / 0x0D - Torso (inner)(Chest Armor)
  Layer 14 / 0x0E - Bracelet
  Layer 15 / 0x0F - Face
  Layer 16 / 0x10 - Facial Hair
  Layer 17 / 0x11 - Torso (Middle)(Surcoat, Tunic, Full Apron, Sash)
  Layer 18 / 0x12 - Earrings
  Layer 19 / 0x13 - Arm Covering/Armor
  Layer 20 / 0x14 - Back (Cloak)
  Layer 21 / 0x15 - BackPack
  Layer 22 / 0x16 - Torso (outer)(Robe)
  Layer 23 / 0x17 - Legs (outer)(Skirt/Kilt)
  Layer 24 / 0x18 - Legs (inner)(Leg Armor)
  Layer 25 / 0x19 - Mount (Horse, Ostard, etc.)
  Layer 26 / 0x1A - (Sell container) NPC Buy Restock Container
  Layer 27 / 0x1B - (Bought container) NPC Buy No Restock Container
  Layer 28 / 0x1C - (Buy container) NPC Sell Container
  Layer 29 / 0x1D - Bank Box
- Colours and Colour Chart

  Colours can be applied to objects via DFN tags (colour=#), GM commands ('dye #, 'set colour #) or JavaScript (myItem.colour = #). They can also be applied to text via parameters in JS Object Methods such as TextMessage and EmoteMessage, and in Gump Methods such as AddGump and AddText. Note that not all these colours can be set by the plain 'dye command and/or dye tubs in the game.

  ### UOX Colour Chart

  This list of colours that can be used to change the appearance of objects (and text) in the UO client is not by any stretch complete, but will hopefully serve as a quick-guide for what is possible to do with colours in the game.

  Parts of this list was originally created/presented by Fearicon as far back as 1998! If a range of colours is listed, the first value in the range is generally a lighter shade of that colour, while the last value is a darker shade.

  UOX Colour Chart

  General

  0x0000 // Default/Undyed
  0x0001 // Solid/Pure Black
  0x096d // Gold
  0x096c // Dark Grey
  0x066d // Dark Red
  0x0599 // Dark Green
  0x084e // Lime Green
  0x054a // Teal Green
  0x0544 // Blue-Green
  0x084c // Medium Blue
  0x052f // Dark Blue
  0x084d // Yellow
  0x051d // Purple Black
  0x051e // Pearl Blue
  0x83F8 // Flesh

  Default Colours
  0x0002 - 0x03E9 // Colours you get when using 'DYE without parameters
  0xF000 // Transparent Skincolour
  0x03EA - 0x0422 // Skincolours with dyed undewear
  0x83EA - 0x8422 // Skincolours without dyed underwear
  0x0423 - 0x044D // Multicoloured

  Hair Colours
  0x044E -> 0x0455 // Black
  0x0456 -> 0x045D // Bronze
  0x045E -> 0x0465 // Gold
  0x0466 -> 0x046D // Yellow Gold
  0x046E -> 0x0475 // Copper
  0x0476 -> 0x047D // Dark Copper

  Special Colours
  0x0480 // Ice Blue
  0x0481 // Snow White
  0x0482 // Cold Flesh Colour
  0x5555 // Smoke Colour

  Misc Colours
  0x0481 -> 0x04B0 // Multicoloured
  0x04B1 -> 0x04B9 // Red
  0x04BA -> 0x04C2 // Red
  0x04C3 -> 0x04CB // Red
  0x04CC -> 0x04D4 // Blueish Red
  0x04D5 -> 0x04DD // Blueish Red
  0x04DE -> 0x04E6 // Blue
  0x04E7 -> 0x0514 // Multicoloured
  0x0515 -> 0x051D // Blue
  0x051E -> 0x0526 // Blue
  0x0527 -> 0x052F // Blue
  0x0530 -> 0x0538 // Blue
  0x0539 -> 0x0541 // Blue
  0x0542 -> 0x054A // Blue
  0x054B -> 0x0578 // Multicoloured
  0x0579 -> 0x0581 // Blueish Green
  0x0582 -> 0x058A // Green
  0x058B -> 0x0593 // Green
  0x0594 -> 0x059C // Green
  0x059D -> 0x05A5 // Brownish Green
  0x05A6 -> 0x05AE // Brownish Green
  0x05AF -> 0x05DC // Multicoloured
  0x05DD -> 0x05E5 // Brown
  0x05E6 -> 0x05EE // Brown
  0x05EF -> 0x05F7 // Brown
  0x05F8 -> 0x0600 // Brown
  0x0601 -> 0x0609 // Brown
  0x060A -> 0x0612 // Reddish Brown
  0x0613 -> 0x0640 // Multicoloured
  0x0641 -> 0x0649 // Pink
  0x064A -> 0x0652 // Pink
  0x0653 -> 0x065B // Pink
  0x065C -> 0x0664 // Pink
  0x0665 -> 0x066D // Red
  0x066E -> 0x0676 // Red
  0x0677 -> 0x06A4 // Multicoloured
  0x06A5 -> 0x06AD // Greenish Brown
  0x06AE -> 0x06B6 // Greenish Brown
  0x06B7 -> 0x06BF // Greenish Brown
  0x06C0 -> 0x06C8 // Brown
  0x06C9 -> 0x06D1 // Brown
  0x06D2 -> 0x06DA // Brown
  0x0709 -> 0x0711 // Brownish Green
  0x0712 -> 0x071A // Brownish Green
  0x071B -> 0x0723 // Brownish Green
  0x0724 -> 0x072C // Brown
  0x072D -> 0x0735 // Brown
  0x0736 -> 0x073E // Brownish Red
  0x073F -> 0x0747 // Brownish Red
  0x0748 -> 0x0750 // Brownish Red
  0x0751 -> 0x0759 // Greyish Red
  0x075A -> 0x0762 // Grey with a little red
  0x0763 -> 0x076B // Grey with a little blue
  0x076C -> 0x0774 // Greyish Blue
  0x07D1 -> 0x07D6 // Green
  0x07D7 -> 0x07DC // Beige
  0x07DD -> 0x07E2 // Red
  0x0835 -> 0x083A // Blue
  0x083B -> 0x0840 // Beige
  0x0841 -> 0x0846 // Red
  0x0847 -> 0x084C // Blue
  0x084D -> 0x0852 // Yellow - Green
  0x0899 -> 0x089E // Red
  0x089F -> 0x08A4 // Green
  0x08A5 -> 0x08AA // Beige
  0x08AB -> 0x08B0 // Blue
  0x08FD -> 0x0902 // Silver
  0x0903 -> 0x0908 // Gold
  0x0909 -> 0x090E // Bronze/Copper
  0x0961 -> 0x0966 // Silver
  0x0967 -> 0x096C // Silver
  0x096D -> 0x0972 // Gold
  0x0973 -> 0x0978 // Silver-Gold
  0x0979 -> 0x097E // Copper-Gold

  For additional colours, experiment with the numbers - or check out one of the tools that can show an overview of all the colours in the game, such as UOFiddler!

  ### Partial-hues and Ethereal hues

  Characters can be dyed with partial-hues, where only some parts of the character gets the selected colour, and other parts are left as the original colour. By adding 0x8000 to a colour you want to apply to a character, the partial-hue flag for said character will be enabled in the client. For instance... if you use 'dye 0x0279 on your human character, the entire character will receive that colour, including the loincloth. However, if you use 'dye 0x8279 (0x0279 + 0x8000), only the body receives the colour, while the loincloth is left at its original colour!

  This applies to many other creatures in the game as well; with the partial-hue flag, a panther's eyes will remain glowing even if you dye the rest of the panther pink. A sheep's wool will stay white, even if the rest of the NPC is dyed green. Note that this only applies to characters - items don't support this partial-hue flag (although some items, like the jester suit, will only have some parts dyed by default).

  Similarly, you can make any creature look "ethereal" by giving it the hue 0x4001 (actually, any hue between 0x4001 and 0x7fff should work, but they all look the same, so no point using anything else!). Example: 'dye 0x4001 on a forest ostard NPC will turn it ethereal.

- Maps, Statics and Tiledata

  ### Maps and Statics

  Upon startup, UOX3 will attempt to load map and statics files based on the parameters provided in UOX3/dfndata/maps/maps.dfn. It is important that the map sizes (in height and width) defined in this file match up to the actual files being loaded. Note that the default sizes match up with map files present in v5.0.0a and newer.

  To make UOX3 load maps of a different size, make sure to update the X and Y sizes in this file accordingly!

  ### Tiledata

  UOX3/dfndata/maps/tiles.dfn allows overriding flags/properties stored in tiledata.mul for different tiles in UO, which UOX3 uses for various purposes such as determining whether a surface is walkable, climbable (ladders) or blocks line of sight. It is most commonly used to address various issues with tiles, such as missing or incorrect flags, without having to modify the tiledata.mul file itself.

  Example of syntax:
  [TILE 0x0AA4] // Tile ID
  {
  BLOCKING=1 // Tiledata flag, on (1)
  STANDABLE=0 // Tiledata flag, off (0)
  }

  Full List of Tiledata Flags

  CTile Properties
  WEIGHT - Default weight
  HEIGHT - Default height
  LAYER - Default layer
  HUE - Default hue
  QUANTITY - Default quantity
  ANIMATION - Default animation
  NAME - Default name

  BaseTile Flag 1
  ATFLOORLEVEL - Background
  HOLDABLE - Weapon
  SIGNGUILDBANNER - Transparent
  WEBDIRTBLOOD - Translucent
  WALLVERTTILE - Wall
  DAMAGING - Damaging
  BLOCKING - Impassable
  LIQUIDWET - Wet

  // BaseTile Flag 2
  UNKNOWNFLAG1 - Unknown
  STANDABLE - Surface
  CLIMBABLE - Bridge
  STACKABLE - Generic/Stackable
  WINDOWARCHDOOR - Window
  CANNOTSHOOTTHRU - No Shoot
  DISPLAYASA - Prefix A
  DISPLAYASAN - Prefix An

  // BaseTile Flag 3
  DESCRIPTIONTILE - Internal (things like hair, beards, etc)
  FADEWITHTRANS - Foliage
  PARTIALHUE - Partial Hue
  UNKNOWNFLAG2 - Unknown
  MAP - Map
  CONTAINER - Container
  EQUIPABLE - Wearable
  LIGHTSOURCE - LightSource

  // BaseTile Flag 4
  ANIMATED - Animated
  NODIAGONAL - No Diagonal
  UNKNOWNFLAG3 - Unknown
  WHOLEBODYITEM - Armour
  WALLROOFWEAP - Roof
  DOOR - Door
  CLIMBABLEBIT1 - Stair Back
  CLIMBABLEBIT2 - Stair Right

  // Additional flags added with High Seas expansion, purpose unknown:
  ALPHABLEND - Unknown
  USENEWART - Unknown
  ARTUSED - Unknown
  NOSHADOW - Unknown
  PIXELBLEED - Unknown
  PLAYANIMONCE - Unknown
  MULTIMOVABLE - Unknown

- (Bonus) Converting UOP to MUL

  ### Brief History of UOP Format

  In UO Client v7.0.24.2, a new fileformat was introduced - UOP, that would eventually replace some of the files using the old MUL format. Amongst the files converted were the various map*.mul files, which became map*LegacyMUL.uop files. At the time, and before the different UO emulators (including UOX3) added support to load this new fileformat, prospective shard admins had to convert those .uop files back to .mul files before they could be used.

  Thankfully, creative souls came up with several tools that could be used to convert UO data files between these two file formats, for instance UOFiddler and LegacyMULConverter-N.

  #### Conversion not Needed for UOX3 v0.99.3 and Above

  Do take note, that starting with UOX3 v0.99.3, these .uop files can be read by UOX3 directly without a need to convert them to back to the original format first. No need to convert! Should you for whatever reason still want to convert the map files back to .mul files, for instance to use them with an older version of UOX3, or to load them in a map-editing tool that doesn't support the newer format, here follows a quick guide on how you can do just that, using UOFiddler:

  ### Step 1 - Backup UOP Files

  Before doing anything else, locate your UO folder and copy all the .UOP files from that folder and into a new folder of your choice, so you don't mess with the original files in the UO client - just in case something goes horribly wrong.

  ### Step 2 - Download UOFiddler

  Second, download the latest version of UOFiddler from the link above, unzip it, and start UOFiddler.

  ### Step 3 - Setup Data Paths in UOFiddler

  Second, click Settings > Path Settings and make sure that the path to your UO folder is correct in the window that pops up. If you need to correct the path, use the Set path manual button and locate your UO folder.

  Next, hit Settings > Reload Files to have UOFiddler reload the data files from the path you selected.

  ### Step 4 - Convert UOP Files to MUL

  Once this is done, either use the small arrow buttons in the top right corner of UOFiddler to navigate to the far right tab called UOP Packer, or expand the size of the window until you see and can click that tab.

  Select the folder you copied the .UOP files into previously, using the file picker or by typing the path into the text-field, then select Extract UOP to MUL and hit Start.

  After around 15-30 seconds, UOFiddler should have finished converting the UOP files in your temporary folder to MUL files!

  Note that this process also works in reverse! If you have made any changes to the .mul files and want to convert them back to .uop to have them be read by the client, just follow the same procedure except choose Pack MUL to UOP in the last step instead!

- Compiling UOX3 Source

  Follow the steps below for your preferred platform if you wish to download and compile the UOX3 source directly from GitHub yourself.

  ### Windows Users

  #### Step 1 - Clone the UOX3 Git Repository

  Using GitHub Desktop
  1. Download and install GitHub Desktop. If you already have another tool for git installed, you can use that instead.
  2. Run GitHub Desktop (or your preferred git tool) and click File->Clone Repository from the menu.
  3. Click the URL tab, enter https://github.com/UOX3DevTeam/UOX3.git, then provide a local path for where you want the UOX3 git repository cloned on your drive.
  4. Hit the Clone button to clone the stable branch of the UOX3 git repository to the specified local path, along with the latest verified compatible version of SpiderMonkey (v1.7.0).
  Checking out Other Branches

  If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can click the Current branch dropdown menu in GitHub Desktop and select the branch you wish to check out. If you're out to do some code development, or just want to get at the latest possible changes, be sure to select the develop branch instead of the main/master one!

  #### Step 2 - Compile UOX3

  Option A - Visual Studio 2017/2019

  This option will let you use Visual Studio solution/project files to compile both UOX3, SpiderMonkey and zlib with Visual Studio's default VC++ compiler. Note that you can download the Free Community Edition of Visual Studio if you don't have it already. This approach also embeds SpiderMonkey directly inside UOX3 for a slightly larger (~1-2MB) executable, instead of requiring a separate DLL file, and comes with options for compiling either 32-bit or 64-bit (default) versions of UOX3.

  Note: You'll need to install "Desktop development with C++" via the Visual Studio Installer if you don't have it already, along with the option for this titled MSVC v141 - VS 2017 C++ x64/x86 build tools (v14.16)

  #### SpiderMonkey

  1. Navigate to the UOX3\spidermonkey folder and open SpiderMonkey.sln in Visual Studio.
  2. Make sure you have js32 selected in the Solution Explorer, then select Release and either x64 (64-bit) or Win32 (32-bit) in the Solution Configuration/Platform dropdown menus
  3. Click Build > Build js32 from the menu.
  4. Visual Studio will compile SpiderMonkey and create spidermonkey\Release\x64 (64-bit) or spidermonkey\Release\x86 (32-bit) folders with the compiled js32.lib library file contained within. No further actions are necessary here, so you can close the SpiderMonkey VS Solution.

  #### zlib

  1. Navigate to the UOX3\zlib folder and open zlib.sln in Visual Studio.
  2. Select Release and either x64 (64-bit) or Win32 (32-bit) in the Solution Configuration/Platform dropdown menus
  3. Click Build > Build zlib-static from the menu.
  4. Visual Studio will compile zlib and create zlib\x64\Release (64-bit) or zlib\x86\Release (32-bit) folders with the compiled zlib-static.lib library file contained within. No further actions are necessary here, so you can close the zlib VS Solution.

  #### UOX3

  1. Open UOX3_Official.sln from the UOX3\source folder.
  2. Make sure you have UOX3_Official selected in the Solution Explorer, then select either Release or Debug, and either x64 (64-bit) or Win32 (32-bit) in the Solution Configuration/Platform dropdown menus, or via Build -> Configuration Manager.
  3. Select Build -> Build UOX3_Official to start compiling UOX3. When done, you'll find UOX3.exe in either UOX3\source\Release\x64 (or \x86) or UOX3\source\Debug\x64 (or \x86), depending on your choices in the previous step.
  Adding SpiderMonkey/zlib references in Configuration Manager

  If VS give you link errors when attempting to build UOX3, references to SpiderMonkey or zlib might have gone missing! Try the following steps to add them back.

  1. Right click on UOX3_Official in the Solution Explorer, and select Properties.
  2. With the desired configuration (ex: Release, x64) selected at the top of the panel, add references to SpiderMonkey and zlib in these sections:
  - VC++ Directories > Include Directories (add path to SpiderMonkey and zlib root folders)
  - VC++ Directories > Library Directories (add path to SpiderMonkey Release\x64 or Release\x86 folder, as well as zlib \x64\Release or \x86\Release folder, depending on desired configuration)
  - VC++ Directories > Source Directories (add path to SpiderMonkey and zlib root folder)
  - Linker > Additional Library Dependencies (add path to SpiderMonkey Release\x64 or Release\x86 folder, as well as zlib \x64\Release or \x86\Release , depending on desired configuration)
  3. Press apply!
  4. Repeat process for both Release and Debug configurations (chosen at top of panel), then retry the UOX3 build process!
  Option B - Visual Studio 2017/2019 and CMake

  This option requires installing the Visual Studio toolset named Linux development with C++ and the component called Visual C++ tools for CMake and Linux. Use the Visual Studio Installer to modify your install of Visual Studio if you don't already have these installed! This approach compiles SpiderMonkey to a separate DLL (js32.dll) file that needs to live inside the same folder as the main UOX3 executable, and currently only supports compiling a 32-bit version of UOX3.

  1. Start Visual Studio and use File > Open > CMake and select CMakeLists.txt in the root project folder (Example: D:\UOX3). Don't open the similarly named file in the source folder directly.
  2. After Visual Studio is done loading the project and has generated some necessary files, select CMake > Change CMake Settings > UOX3 from the toolbar menu, and select either x86-Debug or x86-Release depending on what kind of build you want to make - or do this using the Solution Configuration select menu.
  3. When Visual Studio is done switching to the new configuration, select CMake > Build All from the toolbar menu to start compiling UOX3.
  4. When done, you'll find UOX3.exe and js32.dll in a subfolder named out of the root project folder, more specifically /UOX3/out/build/x86-Debug or x86-Release, based on the selected configuration.
  5. Note that the js32.dll file must be copied to the same folder as UOX3.exe.

  Once this process is done, you can copy your new UOX3.exe (and if using CMake, js32.dll) file from the appropriate output folders (depending on which method and configuration you used) to the root folder of your actual UOX3 project. You'll also need to copy the files and folders contained within the data subfolder of the UOX3 repository, if you don't already have these.

  It is recommended to run your UOX3 shard from a separate, dedicated folder instead of the data folder in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future.

  Once you have all the files in place, you can follow the regular steps listed under Installation and Setup > Configuring Your UOX3 Shard to finish your UOX3 setup!

  ### Linux/macOS Users

  #### Step 1 - Clone the UOX3 Git Repository

  Using git and Terminal

  First step, open a new terminal and enter the following commands:

  1. (Linux) sudo apt install git - This will install git if not already installed (Ubuntu/Debian-based Linux variants). If you're using a non-Debian flavour of Linux, use the default package manager that comes with it to install git instead.
  2. (macOS) xcode-select --install - This will install git if not already installed, along with required make and gcc tools
  3. git clone https://github.com/UOX3DevTeam/UOX3.git - This will clone the stable branch of the UOX3 git repository into a subdirectory of the current directory you're in, named UOX3. The latest verified compatible version of SpiderMonkey (v1.7.0) is also included, as well as a minimal set of files required to compile zlib-1.2.11.
  Checking out Other Branches

  If you'd rather grab another branch of the git repository, like the develop branch where most updates get pushed first before being merged into the master branch, you can use the following command *after* completing the previous step: git checkout develop

  (macOS alternative) Using GitHub Desktop
  1. Download and install the macOS version of GitHub Desktop.
  2. Run GitHub Desktop and click File->Clone Repository from the menu.
  3. Click the URL tab, enter https://github.com/UOX3DevTeam/UOX3.git, then provide a local path for where you want the UOX3 git repository cloned on your drive.
  4. Hit the Clone button!

  #### Step 2 - Compile UOX3

  Compiling with GNU Make and GCC (v9.x and above)

  You'll need a couple tools before you can compile UOX3 on Linux, like GNU Make (4.2.1 or higher recommended) and gcc (v9.x or higher recommended). Install these through your favourite package manager or through your flavour of Linux' variant of the following terminal command (specific to Debian/Ubuntu Linux flavours):

  - (Linux only) sudo apt install build-essential

  Once these tools are in place, navigate to the UOX3 project directory in your terminal and execute the following commands from the project's root directory, in order:

  1. ./automake.sh - First compiles the SpiderMonkey JS library bundled with UOX3, then compiles the included zlib library, and finally compiles the actual UOX3 build, before copying the compiled binary to the root UOX3 project directory.
  Special note for users of Debian/GCC versions below 9.x

  If your version of gcc is below 9.x, you'll need to add -lstdc++fs in Makefile to include the experimental filesystem library from c++17.:

  Change the following line (~34) from
  $(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS)
  to
  $(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS) -lstdc++fs

  Manual Instructions

  If you don't wish to rely on the automake.sh script, but want control over the process yourself, follow these steps (same as what automake.sh does):

  - cd spidermonkey
  - make -f Makefile.ref DEFINES=-DHAVE_VA_LIST_AS_ARRAY CC=gcc
  - Linux
  - ar -r libjs32.a Linux_All_DBG.OBJ/*.o
  - cp Linux_All_DBG.OBJ/jsautocfg.h ./
  - macOS
  - ar rcs libjs32.a Darwin_DBG.OBJ/*.o
  - cp Darwin_DBG.OBJ/jsautocfg.h ./
  - Next up, compile a static library of the included zlib package:
  - cd ../zlib
  - make distclean
  - ./configure
  - make
  - At this point, now cd to the root UOX3 project directory and build UOX3:
  - cd ../source
  - make

  Once this process is done, you will find the compiled uox3 binary in the root UOX3 directory. You can copy this binary to the directory you intend to run your UOX3 shard from, along with all the files and folders contained in the UOX3/data/ subdirectory.

  It is recommended to run your UOX3 shard from a separate, dedicated directory instead of the data directory in your local UOX3 git repository, to avoid potential git conflicts and accidental overwrites when pulling updates to UOX3 from GitHub in the future.

  Copying Required Files to Dedicated UOX3 Directory

  This is an example of how to copy all required files to a directory called UOX3 in your user account's home directory

  1. navigate to root UOX3 project directory
  2. mkdir ~/UOX3
  3. cp uox3 ~/UOX3
  4. cp -r data/* ~/UOX3
  5. cd ~/UOX3

  Once you have all the files in place, you can follow the regular steps listed under Installation and Setup > Configuring Your UOX3 Shard to finish your UOX3 setup.

- Contributing to UOX3

  So, you want to contribute to UOX3, and have your name written into the history books - well, at least into the UOX3 Hall of Fame - for all eternity? Then read on, because you've come to the right place!

  It doesn't matter if you're not the world's best programmer, or if you are not well versed in scripting - contributions to UOX3 can come in many forms, and all are equally well received and appreciated.

  Examples of areas where contributions can be made, any of which can make a difference:

  - Code (Fix bugs, improve cross-platform support, improve on core systems, )
  - JavaScript (Create new functionality for items, NPC AI, spells, commands, etc.)
  - DFNs (Adding definitions for missing items, NPCs, regions, houses, boats, etc.)
  - Documentation (Report broken links, correct inaccurate information, do write ups of how undocumented features work, create tutorials, etc.)
  - Forum Support (Help other users resolve problems, participate in discussions around potential improvements, make feature requests, report bugs, etc.)
  - Discord Chat (Help the "live" community stay active, welcome new users who drop by, help resolve issues of other users, participate in discussions around interesting topics relating to UOX3/UO, etc.)

  Any contributions that involve making changes to UOX3 can either be posted in the Submissions - Fixes & Improvements section of the UOX3.org forums, or can be submitted as a Pull Request on UOX3's GitHub page, for those familiar with that workflow. Do note that any such contributions will be reviewed for quality and fit with the project before being accepted and merged into the core UOX3 project.

  If it so happens, that your code or script contribution is not approved for inclusion in the core UOX3 project, you can still post it as custom additions/tweaks in other parts of the UOX3.org forums, for other users to download! Alternatively, if your changes are extensive enough, you can do what many others have done before you and branch off the main UOX3 project to create something entirely new and exciting!

- Frequently Asked Questions

  Why? Where? Who? When? What?

  What is the purpose of UOX3?

  While one of UOX3's goals is to emulate the functionality and features of the official Ultima Online servers and allow anyone to run a server of their own, another is to allow its users to tweak all aspects those features, and even to create new ones altogether - either through UOX3's JavaScript scripting engine (based on a SpiderMonkey-implementation of JavaScript) or by modifying the source-code for UOX3 directly.

  How much does UOX3 cost?

  Nothing. Anyone who wants can download and use UOX3 for free!

  What license is UOX3's source code released under?

  UOX3 is licensed under v2 of the GNU General Public License (GPL), with the following addendum:

  "In addition to that license, if you are running this program or modified versions of it on a public system you HAVE TO make the complete source of the version used by you available or provide people with a location to download it."

  Full GNU General Public License Text
  What happened to UOX1 and UOX2?

  UOX was the first incarnation of the UO Server emulator, and was created by a fellow nicknamed Jaegermeister. It was short-lived, however, and Cironian aka Marcus Rating rewrote it and released it as UOX2.

  Later on he rewrote UOX2 completely and released UOX3 - which he eventually also open-sourced - which is still the same version we're using now, though quite a lot has changed since then, and a lot of people have contributed to what we're using right now.

  Is UOX3 Legal?

  Disclaimer: This should not be considered as legal advice - it was not written by and is not the opinion or the advice of a lawyer

  Running an UOX3 shard, developing the UOX3 code, distributing the UOX3 program - all that is perfectly legal. There are some more complicated issues however, when it comes to client-files distribution (custom maps, specific versions of client.exe, etc). I suggest you read up on the following document, written by Knox: legality.txt (Note that this should not be considered as legal advice!)

  Why am I getting connection-errors when trying to log in?

  There can be a number of different reasons for why you are unable to connect to a UOX3 shard. Here are some of the most common ones:

  You're trying to connect to UOX3 using an encrypted UO client
  Make sure you remove/patch away the UO client encryption through the use of Razor or a similar programs before trying to connect to a UOX3 shard. UOX3 will only accept clients with no encryption.

  You set the IP and/or Port incorrectly in UOX.INI
  Having the wrong IP or Port in UOX.INI will give you a connection-error when you try to select the UOX3 shard in your client's server-list. The initial connection that checks for user-name/password might still go through, but not the server-selection part.

  You set the IP and/or Port incorrectly in Razor/other tool used to start the client
  If you set the wrong IP to connect to in Razor/other tool you use to start the client, you will not be able to connect to the UOX3 shard at all, it will just give a connection-error immediately. If you set the correct IP but the wrong Port, you will be able to connect and verify your user-name/password, but will not be able to connect to the chosen server in the client's server-list.

  The UO client computer's firewall is blocking outgoing connections
  The computer you're running the UO client on might be blocking outgoing connections, either through firewalls (like the built-in Windows firewall) or through 3rd-party security/antivirus-software. Try to disable whichever software might be blocking the outgoing connection temporarily to see if the connection is then allowed to go through, and/or include the UO client-executable and/or outgoing IP/Port in the exclusion-rules for these softwares.

  The UOX3 shard computer's firewall is blocking incoming connections
  The computer that's running the UOX3 software might be blocking incoming connections, either through software firewalls (like the built-in Windows firewall) or through 3rd-party security/antivirus-software. Try to disable whichever software might be blocking the incoming connection temporarily to see if the connection is then allowed to go through, and/or include the UOX3 software and/or incoming IP/Port in the exclusion-rules for these softwares.

  The UOX3 shard computer's router is not setup to forward incoming connections properly
  If you're trying to connect to the UOX3 shard from an external computer through the Internet, you might have to setup the UOX3 shard computer's Internet-router (if one is present) to forward incoming connections on the specified UOX3 port (2593 by default), to the internal LAN/local-IP of the UOX3 shard computer.

  What era of UO is UOX3 based on?

  Various parts of UOX3 such as combat calculations, weapon/armor values etc are roughly based around UO from the time just before (archive.org) the Age of Shadows expansion (Publish 17) was released. NPC stats less so, due to the lack of accurate data on such stats from back then.

  Note that the combat calculations are hardcoded, but can be overridden through the JavaScript system (or changed in code, of course). The stats of gear and NPCs can be easily tweaked with any text editor, and there are UOX.INI settings that can globally increase/decrease combat difficulty and/or speed.

  Why aren't NPCs fighting back?

  If NPCs aren't fighting back when you attack them, chances are that you are playing on either a GM character, or a character on the admin-account (which all have GM privileges by default). One of the privileges of being a GM (or an admin-character) is that you are flagged as "invulnerable" by default. Since NPCs (and players) can't attack invulnerable characters, this means they will never fight back when you try to attack them. In fact, UOX3 might not allow you to attack them at all.

  Try turning off your invulnerability by using either of these commands:

  'invul false
  'set vulnerable 1

  How do I setup Port Forwarding on my router?

  If the server you intend to run your UOX3 shard on is behind a NAT router, then you might have to forward any incoming connections on port 2593 (or whichever other port you decided to use for UOX3) to the internal LAN-IP given to your server by the router. This is called Port Forwarding (Wikipedia), and whether or not it is required depends on the router and how it is setup. The easiest way to find out is to have someone try to connect to your UOX3 server over the Internet. If they are unable to connect, and you've ruled out all other options (mis-configuration of UOX3/UO Client, firewalls running on host/client computers, etc), then you might have to setup port-forwarding on your router.

  How do I do Port Forwarding?

  The exact procedure varies from router to router, but in general it involves connecting to the router's IP through your browser/Windows Explorer/Linux equivalent, entering the user-name and password required to log on to the router (these can either be default to the router-brand, or custom depending on your Internet-provider), and then adding the UOX3 port to whatever port-forwarding configuration exists for your router.

  Various sites on the World Wide Web include step-by-step instructions for how to setup port-forwarding on different types of routers. One such site is PortForward.com. If the default username/password specific to your router (usually mentioned on these sites) is not working, you might have to consult the documentation that came along with the router, or contact your ISP to get them to provide the username and password.

  How can I check if I set it up correctly?

  To quickly check if you setup your port-forwarding correctly, you can visit CanYouSeeMe.org (Open Port Check Tool) and just enter the port you're trying to forward. Click the 'check' button, and the tool should tell you whether or not it can see a service running on your server through said port.

  The other option is of course to have someone actually try to connect to your shard! :)

- # Feature Documentation

- Advanced Trade System

  The Advanced Trade System was originally created by Magius(CHE), and can be used to set up a system with fluctuating prices for goods (items bought and sold by NPC vendors) across different regions of the game world. Every time the vendors restock their goods, the prices will be adjusted positively or negatively depending on a random range set for each type of good.

  By default, UOX3 comes with categories for goods already assigned to a multitude of items, ready to be used in the trade system, but you'll need to setup the regions portion of the system yourself. See list of Default Goods Categories below.

  Default Goods Categories

  You can add your own custom categories of goods by just adding good=# tags to items with values not already in use below. You can also create your own categories from scratch by removing all existing good tags from the item DFNs, for instance if you want to go with something less complex (or more complex!).

  1 - Chairs

  2 - Tables

  3 - Mushrooms

  4 - Kitchenware

  5 - Leather Containers

  6 - Metal Containers

  7 - Baskets, Kegs, Barrels, Tubs

  8 - Wooden Containers

  9 - House/Boat/Playervendor Deeds

  10 - Ringmail Armor

  11 - Chainmail Armor

  12 - Platemail Armor

  13 - Leather Armor

  14 - Bone Armor

  15 - Helmets

  16 - Shields

  18 - Clothes

  19 - Footwear

  20 - Headwear

  21 - Swords

  22 - Fencing Weapons/Staves and Polearms

  23 - Missile Weapons

  24 - Axes

  25 - Daggers

  26 - Hammers

  27 - Wands

  28 - Magic Items

  29 - Potions

  30 - Magic Reagents

  31 - Scrolls

  32 - Books

  33 - Drinks

  34 - Food

  35 - Games

  36 - Gems

  37 - Jewelry

  38 - Keys

  39 - Mounts

  40 - Raw Food

  41 - Music Instruments

  42 - Carpentry Resources

  43 - Fletching Resources

  44 - Leatherworking Resources

  45 - Lumberjacking Resources

  46 - Mining Resources

  47 - Misc Resources

  48 - Blacksmithing Resources

  49 - Tailoring Resources

  50 - Tinkering Resources

  51 - Alchemy Resources

  52 - Blacksmithing Tools

  53 - Carpentry Tools

  54 - Fishing Tools

  55 - Healing Tools

  56 - Inscription Tools

  57 - Mining Tools

  58 - Tailoring Tools

  59 - Thieving Tools

  60 - Tinkering Tools

  #### Item Setup

  Each item to be affected by the fluctuating prices in the trade system need to have a value and a category of goods assigned to them in the item DFNs. This is done by adding the following tags to the items in question, if they're not already present:

  value=buyPrice sellPrice - base price of item when buying or selling from/to NPC vendors. Required for trade system to be able to make any adjustments to value of item!
  good=goodCategory - the category of goods to associated a given item with (see list above)

  #### Region Setup

  Once those tags have been added in the Item DFNs, the next step is to setup the various "regions" in regions.dfn. This is done by adding the following tags to the regions that should impact the trade system:

  good=goodCategory - a category of goods (see list above) that the region should have an impact on the prices for. A region can affect multiple goods, and each such tag should be immediately followed by the following two tags:
  buyable=# / # # - Fixed or random % modifier (accepts negative numbers) by which the baseValue of items belonging to the associated category of goods will be modified when bought from NPC vendors in the region.
  sellable=# / # # - Fixed or random modifier value (accepts negative numbers) by which the baseValue of items belonging to the associated category of goods will be modified when sold to NPC vendors in the region.
  randomvalue=# Random modifier value (accepts negative numbers) by which the baseValue of items belonging to the associated category of goods will be modified when vendors restock the item.

  Trade System Example

  A feathered hat ([0x171A] in headwear.dfn) is setup with value=27 13 and good=20 (the goods category for headwear). Normally, this item is sold by NPC vendors for 27 gold, and they'll buy the same item from players at a price of 13 gold.

  A region - for instance Britain - is setup with good=20, buyable=100 (+10.0%) and sellable=-100 (-10.0%) and finally randomvalue=-50 50.

  Meanwhile, another region - for instance Trinsic - is setup with good=20, buyable=-100 (-10.0%) and sellable=1500 (+150.0%) and finally randomvalue=-50 50 (-5.0% to 5.0%).

  A player goes to a tailor NPC in Britain, buys a feathered hat for a price of 27 * 1.1 (+10.0%) = 30 gold, then heads off to Trinsic, where they sell the feathered hat to another tailor NPC for the price of 13 * 2.5 (+150.0%) = 33 gold. Profit! The player then makes the mistake of buying another feathered hat in Trinsic for the price of 27 * 0.9 (-10.0%) = 24 gold, heads back to Britain and sells it to the vendor there for 13 * 0.9 (-10.0%) = 12 gold! Ouch.

  A little while later, the vendors restock their goods, and randomvalue=-50 50 kicks in and adjusts the overall price of feathered hats by +5% in Britain and -3% in Trinsic. Feathered hats can now be bought and sold in Britain for 28 gold and 14 gold respectively, while they go for 26 gold and 13 gold respectively in Trinsic. The selling price in Trinsic remains the same, because an adjustment of -3% is not enough to overcome the powers of rounding (12.61 gold = 13).

- Advancement Gates

  Advancement Gates is a concept in UOX3 that allows you to set up automated shortcuts for giving players a boost to stats, skills and items in-game without GM intervention. They can for instance be used to create custom class templates beyond what is offered during character creation in the client, can be used for events where you'd like to give players some special items, and can even be combined with another concept such as Monster Gates and the Race System to allow players to take on the roles of monsters on your shard.

  Note: Although they're called advancement "gates", they can actually be any object the player is able to walk onto/collide with!

  ### advance.dfn

  The basis for the advancement gates lies in DFNDATA/ADVANCE/advance.dfn. Below is an example of an entry from that file, with explanations for what each line does (click to expand):

  Advancement Gate in advance.dfn

  // Master Smith Label for easy identification of advancement gates
  [ADVANCEMENT 1] Unique identifier
  {
  STR=95 Sets Strength to 95
  DEX=80 Sets Dexterity to 80
  INT=60 Sets Intelligence to 60
  BLACKSMITHING=940 Sets Blacksmithing skill to 94.0
  MINING=940 Sets Mining skill to 94.0
  TINKERING=940 Sets Tinkering skill to 94.0
  EQUIPITEM=0x13e3 Adds an equips a smith's hammer
  PACKITEM=0x0fbc Adds tongs in backpack
  PACKITEM=0x1bf2,30 Adds 30 iron ingots in backpack
  PACKITEM=0x0e85 Adds a pick-axe in backpack
  PACKITEM=0x1ebc Adds Tinker's Tools in backpack
  }

  An additional tag that is supported, but not used in the above example, is the SKIN=0x#### tag, which allows you to modify the skincolor of a character to the specified hue.

  Once a player steps into a gate with the above advancement setup, they'll have their stats and skills set as defined, and will get any items listed added to their inventory.

  ### Setting Up an Advancement Gate

  To actually set up an advancement gate in-game, there are two paths you can take. You can either add them by hand, in-game, using GM commands, or you can set up predefined items in the item DFNs that can be quickly added anywhere at any time with a single GM command. Let's look at each option.

  Manual Setup

  1) Add a gate item (or another item players can walk over) where you want your advancement gate to be.

  For a blue moongate, try 'add 0x0f6c
  For a red moongate, use 'add 0x0dda

  You can also dye these a different color using the 'dye command.

  2a) If you want players to only able to make use of the advancement gate a single time, use 'set type 80 and targeting the gate to set it up as a "single use" advancement gate.

  2b) Alternatively, use 'set type 81 to make it a "multiple use" advancement gate that can be used over and over again.

  3) Use 'set morex # to point the advancement gate to a unique identifier already setup in advance.dfn (see above). For example, 'set morex 1 would assign the [ADVANCEMENT 1] gate setup from advance.dfn to the item, and players stepping onto the gate will become a Master Smith, based on the example from above.

  4) To make sure your gate item doesn't vanish into thin air, use the 'nodecay command on it to stop it from decaying.

  5) To make sure your players can't pick it up and run away with it, use the 'set movable 3 command on it.

  6) Finally, use the 'tweak command on the gate to give it an identifying name so players can tell what it is if they click on it.

  Predefined Item Setup

  If you want to create re-usable definitions (templates, if you will) for advancement gates that let you quickly add them in multiple areas without having to set up each one from scratch, you can add items like this to a custom .dfn file inside the DFNDATA/ITEMS/ folder:

  [adv_gate_mastersmith] Name of custom item
  {
  get=base_item Inherit basic item properties from base item so we don't have to re-add them here
  name=Master Smith Advancement Gate Name that shows when players click on the gate
  id=0x0f6c ID of the item to be used as a gate; a blue moongate in this example
  type=80 Sets item to "single use advancement gate" itemType (use 81 for multi-use gates)
  morex=1 Assigns the advancement ID from advance.dfn
  decay=0 Makes item not decay
  movable=3 Makes item immovable
  }

  For each advancement gate setup you have in advance.dfn, set up one such item definition. Once done, either restart UOX3 or reload DFNs using the UOX3 console menu (press * to deactivate safe mode, followed by 7 to reload DFNs or ? to see menu).

  The next time you log into your shard, you can use the following GM command to add your custom advancement gate item anywhere you want:

  'add item adv_gate_mastersmith (replace name with name you give your custom gate item)

- Character Priv Flags

  Character priv flags can be used to give additional privileges to certain characters, whether players or NPCs. These privs are stored in a 16-bit large bitset field for each character, where each bit represents a 0/1 flag that is either enabled or disabled for the character in question. Using this approach we can be more efficient when it comes to storing these flags in world saves, compared to storing each individual flag as its own data entry.

  For example, an NPC with a PRIV=0x4 tag in its definition setup will have the Invulnerable flag enabled, while a player with a priv value of 0x40 would be allowed to snoop freely in other characters' backpacks without using the Snooping skill (usually a privilege restricted to GMs!).

  Multiple priv flags can be set on a character at the same time. Example: When the 'make GM command is used to turn a regular player into a GM, that player also receives the following privs behind the scenes: GM (0x1), Broadcast (0x2), Invulnerable (0x4), SingleClickSerial (0x8), GM Pageable (0x20), Snoop Freely (0x40), NoNeedMana (0x800) and NoNeedReags (0x4000) for a combined priv value of 0x1 + 0x2 + 0x4 + 0x8 + 0x20 + 0x40 + 0x800 + 0x4000 = 0x486f

  Another example would be an NPC that's both Frozen (0x200, unable to move) and Dispellable (0x1000, can be dispelled using the magic spell Dispel): 0x200 + 0x1000 = 0x1200

  ### List of Character Privs

  Note that privs listed in Red are specific to Players, while the ones listed in Blue are shared between both Players and NPCs.

  0x1 - GM (Character is a GM)
  0x2 - Broadcast (Character can broadcast globally on server)
  0x4 - Invulnerable (Character is invulnerable to damage?)
  0x8 - SingleClickSerial (Show character serials on single click/all-names)
  0x10 - Show Skill Titles (Show skill titles in paperdoll)
  0x20 - GM Pageable (Character can answer GM Pages from players)
  0x40 - Snoop Freely (Character can snoop freely in backpacks independent of snooping skill)
  0x80 - Counselor (Character is a Counselor)
  0x100 - AllMove (Character can move any dynamic item)
  0x200 - Frozen (Character is frozen and cannot move)
  0x400 - ViewHouseAsIcon (Character views multis as item deeds instead of multis)
  0x800 - NoNeedMana (Character doesn't need mana to cast spells)
  0x1000 - Dispellable (Character can be dispelled by the Dispel spell)
  0x2000 - TempReflected (Character has a temporary magic reflection spell active)
  0x4000 - NoNeedReags (Character doesn't need reagents to cast spells)
  0x8000 - PermReflected (Character has a permanent magic reflection spell active)

  Priv flags can be pre-defined for NPCs via the PRIV=# DFN tag, or can be get/set dynamically via the Character JS property .priv in JS scripts.

- Crafting System

  The core of the crafting system in UOX3 is setup in a series of DFN files, usually one per crafting skill, that all exist in the UOX3/dfndata/create/ folder. Each of these files contain a number of references to menus, submenus, items and resources, which altogether are used by UOX3 to create the in-game crafting menus you see when using the appropriate crafting tools and skills.

  ### Sub Menu:

  When interpreting these files and creating the in-game crafting menus, UOX3 starts by looking up the first [SUBMENU #] section it can find, and by default that can be found in smithing.dfn, and looks like this:

  [SUBMENU 1]

  [SUBMENU 1]
  { Blacksmithing
  MENU=1 // armor
  MENU=2 // shields
  MENU=3 // weapons
  }

  Note: The ID used for a SUBMENU section must be unique (across all create DFN files), and the same is true for the other menu-specific sections in the create DFN system, like MENUENTRY and ITEM (see below).

  ### Menu Entry

  The above sub-menu contains three MENU entries - for armor, shields and weapons respectively - which are references to [MENUENTRY #] sections defined in the same file. Here's an example of one of them, for shields:

  [MENUENTRY 2]

  [MENUENTRY 2]
  {
  NAME=Shields
  ID=0x1b74
  SUBMENU=3
  }

  Each such [MENUENTRY #] section contains both an item ID (for an item that is displayed to represent an "item/menu category" in the crafting menu), and another SUBMENU reference. Following said reference takes us to the [SUBMENU 3] section, which contains some ITEM entries:

  [SUBMENU 3]

  [SUBMENU 3]
  { Shields
  ITEM=367
  ITEM=2
  ITEM=3
  ITEM=4
  ITEM=5
  ITEM=6
  MENU=0
  }

  ### Item Entry:

  These entries refer directly to [ITEM #] sections defined further down in the same file, which contain all the requirements needed to craft an item, as well as various item properties that will be assigned to the crafted item after it has been made, such as colour, rank, etc. An example, let's look at the item referenced by the ITEM=2 entry:

  [ITEM 2]

  [ITEM 2]
  {
  NAME=bronze
  ID=0x1b72
  RESOURCE=0x1bf2 12
  SKILL=7 0 150
  ADDITEM=0x1b72
  MINRANK=1
  MAXRANK=10
  SOUND=0x002A
  }

  When one of these ITEM entries are selected in the crafting menu, UOX3 first checks that the player meets the crafting requirements as defined in the ITEM section, allows or denies the crafting attempt, and then returns either a failure or success to the player based on a combination of skill-checks and random luck.

  Success will cause the defined amount of resources to be consumed as part of the crafting process, and in return the player is given the final crafted item. Failure will cause a small amount of resources to go to waste, with no crafted item being given to the player.

  ### Resource Types

  Named resource types such as WOOD, LEATHER or CLOTH can be used as resource requirements instead of direct references to specific resource IDs. This allows for a setup where crafting particular items can be done using any resource ID that belongs to a given, named resource type, rather than being restricted to any one particular resource ID.

  For instance, instead of saying "this item requires a resource with ID 0x175d (folded cloth) to craft", which would make it impossible to craft the same item using a similar resource with ID 0x1768 (cut cloth), we can say "this item requires a resource of type CLOTH to craft". As an example, RESOURCE=CLOTH 12 would allow a player to craft an item using any CLOTH resource.

  The named resource types, and the resource IDs that fit in under those types, are defined in UOX3/dfndata/create/resources.dfn. Here's an example of the CLOTH resource type from that file:

  [RESOURCE CLOTH]

  [RESOURCE CLOTH]
  {
  ID=0x175d
  ID=0x175e
  ID=0x175f
  ID=0x1760
  ID=0x1761
  ID=0x1762
  ID=0x1763
  ID=0x1764
  ID=0x1765
  ID=0x1766
  ID=0x1767
  ID=0x1768
  }

  Any and all of the above listed resource IDs will be counted as CLOTH by the crafting system, allowing for a much more flexible and user-friendly crafting process!

  ### Create DFN Tags

  Create DFN Tags explained

  MENU - menu-system tag that points to a MENUENTRY section.
  SUBMENU - menu-system tag that points to a SUBMENU section.
  ITEM - menu-system tag that points to an ITEM section.
  NAME - the label applied to the item when shown in the crafting menu, which is not necessarily a reflection of the name of the actual item that will be crafted in the end.
  ID - the artwork ID used to display the item in the crafting menu.
  RESOURCE - contains the ID and/or resource type (see below) of the resource required to craft the item, as well as optional amount and colour values. In this case the colour tag is omitted, but the amount is specified, so 12 items with the ID 0x1bf2 (and the colour 0) are required to craft this item. Each item entry can contain multiple RESOURCE tags, if more than one type of resource is required to craft an item.
  SKILL - the skill ID of a skill required to craft the item, along with minimum (minimum skill-points to be able to attempt crafting the item) and maximum (skill-points higher than which player will always succeed) skill-point values. Each item entry can contain multiple SKILL tags, if more than one skill is required to craft an item.
  ADDITEM - the tag pointing to the [section header] name of the actual item that will be crafted, as defined in the item DFNs in UOX3/dfndata/items/
  MINRANK - represents the minimum item rank that can be randomly applied to the crafted item based on the rank system, which can cause items to become weaker or stronger than average.
  MAXRANK - represents the maximum item rank that can be randomly applied to the crafted item based on the rank system, which can cause items to become weaker or stronger than average. If rank system is off, the default rank value is 10.
  SOUND - the sound FX that plays when the item is being crafted.

  In addition, there are some supported tags not used in the above example:
  DELAY - the delay in milliseconds before the crafting process completes and the item has been crafted.
  SPELL - the spell ID of a spell required to be in the player's possession (in a spellbook) in order to craft the item. Primarily used by the Inscription skill.

  ### Rank System

  Advanced Topic: Rank System

  The rank system is an extension of the crafting system that calculates a "quality rank" for crafted items based on a player's average skill in all skills required to craft the item, and on the MINRANK and MAXRANK tags of the item's entry in the create DFNs, which by default ranges from 1 to 10. Depending on the calculated rank, a modifier is applied to some of the item's base properties. The system can be enabled/disabled via the RANKSYSTEM=1/0 setting in UOX.INI.

  The item properties affected by the rank system, if enabled:
  lodamage/hidamage
  ar/physical resist
  hp/maxhp
  buyvalue/sellvalue/

  These properties are modified according to the following formula:
  newPropertyVal = (( rank * propertyVal ) / 10 )

  Thus, an item with a calculated final rank of 10 will not be modified, while any rank below 10 will reduce the values of the above properties for the item by -10% per rank below 10.

  Calculation of rank takes place as part of the crafting process. First, a range of potential ranks is determined based on the values of the MINRANK and MAXRANK tags for an item in the create DFNs. Then, for each skill required to craft the item, the system calculates a temporary rank based on the player's skill, random chance, and a UOX.INI setting (SKILLLEVEL=5) which acts as a global modifier to the system to make it easier (low SKILLLEVEL value) to get high rank items, or harder (high SKILLLEVEL value) to get high rank items.

  When a temporary rank has been calculated for all skills required to craft the item, the average of all these is chosen as the item's final rank, and the modifiers are permanently applied to the item's properties.

- Dictionaries

  UOX3 comes with a custom, multilingual dictionary system that allows shard admins to set up and translate their own system and script messages to any language supported by UOX3 and the UO client. This system has some pros and cons over the usual "cliloc" (client localization, also supported!) system UO uses, in that it allows shard admins to send completely customized messages to the client - in any language supported by server and using any font displayable in the client - without needing to patch the client, at the cost of using more bandwith than the built-in cliloc system in the client.

  The dictionaries are set up in the UOX3/dictionaries/ folder, with each language contained in its own dictionary file with a file-ending matching a group of language codes used in the UO client. ENG, for instance, covers all English language codes, and FRE does the same for French ones. The exceptions are the files with a .ZRO and .UNK extensions. These are used as default files when no/an unknown language is returned from the client.

  #### Option to Specify Fixed Server Language

  By default, UOX3 will attempt to send messages to connected clients in whichever language is specified by the client, but will fall back to the default language (English) if the language set in the client is not supported, or if the message in question does not exist in the dictionary for that language.

  However, via the UOX.INI setting SERVERLANGUAGE, shard admins can specify a fixed language for the server, and if set, all messages to connected clients will be sent in this language.

  #### Language Groups supported in UOX3's Dictionary System (and values used to set language in UOX.INI):

  0 - ZRO (Default - English, used when unknown language code is returned from client )
  1 - ENG (English - ENU, ENG, ENA, ENC, ENZ, ENI, ENS, ENJ, ENB, ENL, ENT, ENW, ENP)
  2 - GER (German - DEU, DES, DEA, DEL, DEC)
  3 - SPA (Spanish - ESP, ESM, ESN, ESG, ESC, ESA, ESD, ESV, ESO, ESR, ESS, ESF, ESL, ESY, ESZ, ESB, ESE, ESH, ESI, ESU)
  4 - FRE (French - FRA, FRB, FRC, FRS, FRL, FRM)
  5 - PTG (Portuguese - PTG, PTB)
  6 - ITA (Italian - ITA, ITS)
  7 - CSY (Czech - CSY)

  #### Language Codes supported by UO client via cliloc system (depending on client version):

  ENG (English)
  DEU (German)
  ESP (Spanish)
  FRA (French)
  CHT (Chinese)
  CHS (Non-Traditional Chinese)
  JPN (Japanese)
  KOR (Korean)

  In older client versions, it is possible to change the client language by changing a setting - UserLanguageCodeString - in the uo.cfg file. Example: UserLanguageCodeString=DEU. In modern client versions, this seems to instead be dictated automatically by the regional settings in Windows, meaning the above uo.cfg setting might not work.

  If using the ClassicUO client, the client language can be changed by changing the lang setting in that client's settings.json file. Supported language codes (as of 27/07/2021) in this client: "RUS", "FRA", "DEU", "ESP", "JPN", "KOR", "PTB", "ITA", "CHT".

  Alternatively, it's also possible to set a specific language for a player's socket either through a script (for instance via a custom menu that could allow players to choose which language to use) or via the GM command 'set language #. See below for a full list of language IDs that can be set in this manner:

  Socket Language List
  0 - ZERO
  1 - UT_ARA
  2 - UT_ARI
  3 - UT_ARE
  4 - UT_ARL
  5 - UT_ARG
  6 - UT_ARM
  7 - UT_ART
  8 - UT_ARO
  9 - UT_ARY
  10 - UT_ARS
  11 - UT_ARJ
  12 - UT_ARB
  13 - UT_ARK
  14 - UT_ARU
  15 - UT_ARH
  16 - UT_ARQ
  17 - UT_BGR
  18 - UT_CAT
  19 - UT_CHT
  20 - UT_CHS
  21 - UT_ZHH
  22 - UT_ZHI
  23 - UT_ZHM
  24 - UT_CSY
  25 - UT_DAN
  26 - UT_DEU
  27 - UT_DES
  28 - UT_DEA
  29 - UT_DEL
  30 - UT_DEC
  31 - UT_ELL
  32 - UT_ENU
  33 - UT_ENG
  34 - UT_ENA
  35 - UT_ENC
  36 - UT_ENZ
  37 - UT_ENI
  38 - UT_ENS
  39 - UT_ENJ
  40 - UT_ENB
  41 - UT_ENL
  42 - UT_ENT
  43 - UT_ENW
  44 - UT_ENP
  45 - UT_ESP
  46 - UT_ESM
  47 - UT_ESN
  48 - UT_ESG
  49 - UT_ESC
  50 - UT_ESA
  51 - UT_ESD
  52 - UT_ESV
  53 - UT_ESO
  54 - UT_ESR
  55 - UT_ESS
  56 - UT_ESF
  57 - UT_ESL
  58 - UT_ESY
  59 - UT_ESZ
  60 - UT_ESB
  61 - UT_ESE
  62 - UT_ESH
  63 - UT_ESI
  64 - UT_ESU
  65 - UT_FIN
  66 - UT_FRA
  67 - UT_FRB
  68 - UT_FRC
  69 - UT_FRS
  70 - UT_FRL
  71 - UT_FRM
  72 - UT_HEB
  73 - UT_HUN
  74 - UT_ISL
  75 - UT_ITA
  76 - UT_ITS
  77 - UT_JPN
  78 - UT_KOR
  79 - UT_NLD
  80 - UT_NLB
  81 - UT_NOR
  82 - UT_NON
  83 - UT_PLK
  84 - UT_PTB
  85 - UT_PTG
  86 - UT_ROM
  87 - UT_RUS
  88 - UT_HRV
  89 - UT_SRL
  90 - UT_SRB
  91 - UT_SKY
  92 - UT_SQI
  93 - UT_SVE
  94 - UT_SVF
  95 - UT_THA
  96 - UT_TRK
  97 - UT_URP
  98 - UT_IND
  99 - UT_UKR
  100 - UT_BEL
  101 - UT_SLV
  102 - UT_ETI
  103 - UT_LVI
  104 - UT_LTH
  105 - UT_LTC
  106 - UT_FAR
  107 - UT_VIT
  108 - UT_HYE
  109 - UT_AZE
  110 - UT_EUQ
  111 - UT_MKI
  112 - UT_AFK
  113 - UT_KAT
  114 - UT_FOS
  115 - UT_HIN
  116 - UT_MSL
  117 - UT_MSB
  118 - UT_KAZ
  119 - UT_SWK
  120 - UT_UZB
  121 - UT_TAT
  122 - UT_BEN
  123 - UT_PAN
  124 - UT_GUJ
  125 - UT_ORI
  126 - UT_TAM
  127 - UT_TEL
  128 - UT_KAN
  129 - UT_MAL
  130 - UT_ASM
  131 - UT_MAR
  132 - UT_SAN
  133 - UT_KOK
- Mining and Ore System

  By default, UOX3 is setup with a very simple, yet customizable mining system, with some options in uox.ini to determine certain basic things.

  Mining Settings in uox.ini

  [resources]
  {
  MINECHECK=1 // Determines where players can mine for ore (0 = Anywhere, 1 = Mountains and cave floors)
  OREPERAREA=10 // Maximum number of ores to spawn in a given resource area
  ORERESPAWNTIMER=600 // Amount of time it takes for 1 ore to respawn/regenerate in a resource area
  ORERESPAWNAREA=10 // Number of resource areas to split the world into
  LOGSPERAREA=3
  LOGSRESPAWNTIMER=600
  LOGSRESPAWNAREA=10
  }

  ### Customizable Ore Types

  The different types of ore a player can mine are defined at the bottom of skills.dfn, in a section called [ORE_LIST]. Shard admins can easily add or remove ore types to/from this list.

  Ore List in skills.dfn

  [ORE_LIST]
  {
  Iron
  DullCopper
  ShadowIron
  Copper
  Bronze
  Gold
  Agapite
  Verite
  Valorite
  }

  Each ore type is then defined and fleshed out in more detail in a section of their own, just below the [ORE_LIST] section, in the same file. If adding new ore types to the list, remember to also add a definition for each one!

  Ore Definitions in skills.dfn

  [Iron] // Section ID of ore type, matching the name given in ORE_LIST
  {
  COLOUR=0x0 // Color of the ore
  MAKEMENU=1 // Crafting menu to open when smelting this ore type?
  MINSKILL=0 // 0 skillpoints in mining required to mine this ore type
  NAME=iron // Name of the ore, shown to player when they find some while mining
  ORECHANCE=500 // Default chance (50.0%) of finding ore type while mining, if no OREPREF tags are present in region.
  }
  [DullCopper] // A second ore type, with a different section ID
  {
  COLOUR=0x0973
  MAKEMENU=200
  MINSKILL=650 // 65.0 skillpoints in mining required to mine this ore type
  NAME=dull copper
  ORECHANCE=112 // 11.2% chance of finding ore type while mining, if no OREPREF tags are present in region
  }

  Note that the sum total of all ORECHANCE values for all ore types (including ones not listed in this example) does not have to add up to 1000, but doing that makes it easier to conceptualize the chance to mine each ore type: 500 becomes 50.0%, 112 becomes 11.2%, etc. Compare to a setup where the values all add up to 750 instead: 500 becomes (500/750)*100 = ~66.67%, 112 becomes (112/750)*100 = ~14.9%. Not so straight forward to calculate in the head!

  ### Region-based Ore Preferences

  By default, the MINECHECK=1 setting in uox.ini allows players to mine any ore from any mountain anywhere, as long as they meet the minimum skill requirement for mining a given type of ore. This means, however, that skilled miners can mine the most valuable ores from any old mountain/cave, even if it's just outside the safe zone of a major city.

  However, the OREPREF tag supported by the Region system gives shard admins some extra control over where players can find the various ore types.

  For instance, the types of ore a player will find in a given region (UOX3/dfndata/regions/regions.dfn) can be regulated by attaching to those regions one or more OREPREF=[oreType,oreChanceWeight] tags - one per ore type to be found in the region, where oreType is one of the ores listed in [ORE_LIST] section, and oreChanceWeight is a weighted value from 0 to ~1000 indicating the chance to find that ore type in the region relative to other available ore types.

  Example Setup in regions.dfn

  This is an example of a custom region setup in UOX3/dfndata/regions/regions.dfn with ore preferences that control what type of ore a player can find in the region, and what the likelihood of finding each ore is:

  [REGION 12]
  {
  NAME=the town of Minoc
  MUSICLIST=6
  GUARDED=1
  GUARDLIST=guard
  GUARDOWNER=The Town
  MAGICDAMAGE=1
  MARK=1
  GATE=1
  RECALL=1
  ESCORTS=1
  X1=2395
  Y1=430
  X2=2555
  Y2=573
  ...
  X1=2485
  Y1=650
  X2=2575
  Y2=695
  OREPREF=DullCopper,500
  OREPREF=Verite,300
  OREPREF=Valorite,150
  OREPREF=Iron,50
  }

  The four OREPREF tags in this example have values of 500, 300, 150 and 50, that by happy coincidence sums up to a total of 1000 (not a requirement, but makes calculating chance for each ore easier in one's brain). If we divide each of those values by the sum total and multiply the result by 100, we get the percentage chance for mining each of the ore types, given that the player has high enough skill. Example:

  Sum Total:
  - 1000 = ((1000 / 1000)*100) = 100%
  Ore chances:
  - 500 = ((500 / 1000)*100) = 50% of finding dull copper ore
  - 300 = ((300 / 1000)*100) = 30% of finding verite ore
  - 150 = ((150 / 1000)*100) = 15% of finding valorite ore
  - 50 = ((50 / 1000)*100) = 5% of finding iron ore

  Note that for this example, players would only be able to find dull copper, verite, valorite and iron ores in this region, as there are no OREPREF tags present for any other ore types.

  It is recommended to include an OREPREF for an ore type (like iron) that can be mined by anyone regardless of skill, so players who go to a region with OREPREFs setup can still mine something useful!

  Note that if no OREPREF tags are present in a region, UOX3 will use the default chance defined for each ore type in skills.dfn to determine what type of ore the player will find when mining there. If no default chance is specified for the ore types, all ore types will have equal chance of being mined in a given region.

- Monster and Race Gates

  ### Monster Gates

  Monster gates are objects (doesn't have to be a gate) of type 82 that will transform players into monsters when they step onto the same tile as the object. More specifically, it will transform the player into whichever NPC is defined on the monster gate object via its DESC property. Simply point the DESC property towards a specific NPC Section ID from the NPC DFNs!

  For instance, 'set desc orc would transform any player who steps through the monster gate into an orc - with the same skills, stats and other properties of regular orcs.

  ### Race Gates

  Race gates are objects (doesn't have to be a gate) of type 83 that can change the race of a character that step onto the same tile as the object. Which race to set is determined by the race gate's MOREX value, which can be set in DFN using the MOREX=raceID tag, or via the following GM command: 'set morex raceID. Additionally, use 'set morez 1 to make the gate reusable, or 0 to make it one-time-use only (per player).

  For a list of races and raceIDs, check UOX3/dfndata/race/races.dfn.

- NPC AI

  NPCs can be assigned an AI type that will make them behave or react to events around them in particular ways. Some of these AI types are combat-oriented (guards, monsters), and some are more service-oriented (bankers, healers, playervendors).

  NPC AI types can be assigned at spawn-time through the npcai=# tag in NPC DFNs, or at run-time via the 'set npcai # GM command or the aitype JS character property.

  Example: The Orc NPC contains the tag npcai=2 in its definition in DFNDATA/NPC/humanoids.dfn. This assigns it the "evil" AI that most monsters use, which makes it attack innocent characters (including players) on sight.

  ### Available NPC AI types

  0 - AI_NONE
  Default - no AI.

  1 - AI_HEALER_G
  Will resurrect dead (non-criminal) players who come within range.

  2 - AI_EVIL
  Will attack all good monsters/animals and players.

  4 - AI_GUARD
  Will attack all evil monsters, and players that commit crimes within town limits.

  5 - AI_FIGHTER
  Same as a guard, minus the teleporting and yelling of "Halt!"

  6 - AI_ANIMAL
  Predatory animal AI that grow hungry over time and has a chance to attack other creatures (and humans) when hungry.

  7 - AI_DUMMY
  Passive AI that doesn't fight back or react to being attacked.

  8 - AI_BANKER
  Bankers give players access to their bank boxes when saying the word "bank" nearby. Tip: This can also be used on players to ALWAYS give them access to their bankbox ;)

  17 - AI_PLAYERVENDOR
  Used by playervendors placed by players at their houses to sell items to other players.

  32 - AI_PET_GUARD
  Guarding AI used by pets when responding to the "guard" pet command.

  88 - AI_CHAOTIC
  This AI does not discriminate, and attacks anything from innocents to monsters (Blade Spirit/Energy Vortexes use this AI).

  666 - AI_HEALER_E
  Evil version of the regular Healer AI, except it resurrects murderers and criminals instead of innocents.

- NPC Escort Quests

  ### Escort Quest System

  NPC Escort Quests allow players to earn a bit of extra gold by escorting NPCs from one location to another (gold paid upon safe arrival in a specified target region)! Basically, dedicated spawners are used to spawn quest NPCs that can be escorted. At the same time, quest messages are automatically posted in any bulletin board in the same region as the spawner, with details on the quest, the quest NPC and the target destination.

  The Escort Quest system is controlled via a few settings in UOX.INI:

  [escorts]
  {
  ESCORTENABLED=1
  ESCORTINITEXPIRE=900
  ESCORTACTIVEEXPIRE=600
  ESCORTDONEEXPIRE=600
  }

  ESCORTENABLED is used to enable (1) or disable (1) the system, while ESCORTINITEXPIRE is the amount of time (in seconds) a quest NPC will wait for someone to initiate the quest, before vanishing. ESCORTACTIVEEXPIRE is the amount of time (in seconds) a player has available to bring the quest NPC to its desired destination before the quest is aborted. Finally, ESCORTDONEEXPIRE is the time in seconds until a quest NPC will vanish after having successfully reached its destination.

  ### Escort Quest NPCs

  To actually spawn the quest NPCs required by the Escort Quest system, you need to setup and place out some Escort NPC Spawners. These are special spawner objects of type that are only active if the escort quest system itself is active via the above mentioned ini setting. For additional instructions on how to setup these spawners, please refer to the list of item types in UOX3, and follow the steps provided there for type 125 - IT_ESCORTNPCSPAWNER. Once one of these spawners has been setup, it can be duplicated into many copies using a command like 'dupe 50, and then placed in areas where quest NPCs should spawn.

  ### Escort Quest Rewards

  The rewards for completing an escort quest are based partly on a given quest NPC's fame, and partly on the amount of gold they're carrying. This setup provides some flexibility for how shard admins want to handle the NPC escorts and associated rewards. For instance, one could setup a Nobleman with high fame (but little gold), a merchant with low fame (but a lot of gold), or an adventurer (with random amount of fame and random amount of gold). The formulate used to calculate the final reward given to the player looks like this: rewardAmount = (( totalFame / 100 ) * 50 ) + ( totalGold * 0.25 )

- NPC (and Item) Loot

  Slaying monsters is all well and good, but surprisingly, most adventurers are not satisfied with just the feeling of ridding the world of evil; they desire something much more valuable: Epic Loot! To give NPCs in UOX3 some of this precious and much-sought-after loot, a couple of methods are at your disposal:

  #### GOLD tag in NPC DFNs

  The GOLD tag will, when present in the definition for an NPC, add a fixed or random amount of gold to said NPC's backpack when they spawn. This gold will end up on the NPC's corpse when slain, unless it's stolen by a rogue before then! Examples of usage:

  GOLD=50 - Adds 50 gold to NPC backpack
  GOLD=50 100 - Adds between 50 to 100 gold to NPC backpack

  #### PACKITEM/LOOT tags in NPC DFNs

  The PACKITEM or LOOT DFN tags can be used to add items to a NPC's backpack when spawned. The PACKITEM tag can either point to specific items, or to itemlists (UOX3/dfndata/items/itemlists/itemlists.dfn) from which random items will be selected. The LOOT tag, meanwhile, can only point to specific type of itemlists called lootlists (UOX3/dfnata/items/lootlists.dfn), from which random items will be selected. Both tags support an extra, comma-separated parameter that determines the amount of items to add, though they differ a bit in how those extra parameters are handled. Some examples:

  PACKITEM=0x0ff0 - Adds a book with a specific ID to backpack
  PACKITEM=0x0eed,50 - Adds 50 gold to backpack
  PACKITEM=listobject6 - Adds a random music instrument from itemlist that listobject6 points to
  PACKITEM=listobject12,10 - Adds a random reagent from itemlist 12 (reagents), and sets the amount to 10
  LOOT=reagents - Adds a random reagent from reagents lootlist to backpack
  LOOT=reagents,10 - Adds 10 random reagents from reagents lootlist to backpack

  #### PACKITEM/LOOT tags in Item DFNs

  These DFN tags can also be used to add items to containers defined in the Item DFNs! By adding a PACKITEM or LOOT tag to a container's item definition, said container will be created with items already in it. One useful example is [bagofreagents] (dfndata/items/magic/reagents.dfn), which is a bag that conveniently comes with 30 of each magic reagent already contained within, with the help of tags like PACKITEM=0x0f7a,30. In this example, a stack of 30 Black Pearls are added.

  Itemlists and Lootlists Explained

  In the above example, LOOT=reagents points to a lootlist called reagents, configured in UOX3/dfndata/items/lootlists.dfn, which consists of a list of items from which UOX3 will randomly select one or more items - depending on whether or not an amount was specified with the LOOT tag. The lootlist in question:

  [LOOTLIST reagents]
  {
  0x0f7a
  0x0f7b
  0x0f84
  0x0f85
  0x0f86
  0x0f88
  0x0f8c
  0x0f8d
  }

  Adding LOOT=reagents,10 in the NPC definition of an orc would add 10 random reagents from the reagents lootlist to that orc when spawned, with an equal chance for any of the reagents to be chosen each of the 10 times a reagent would spawn.

  In the above example, each and every orc in the game would have 10 random reagents in their inventory, every time. However, what if you only wanted the orcs to have reagents as loot some of the time, not all the time?

  #### Blank Lootlist Entries

  For additional control over drop-rates, a special entry is supported in lootlists, called "blank" (without the quotation marks). If UOX3 selects one of these special entries when making a random selection from a lootlist, it will interpret this as if no item should be spawned. Example:

  [LOOTLIST reagents]
  {
  0x0f7a
  0x0f7b
  0x0f84
  0x0f85
  0x0f86
  0x0f88
  0x0f8c
  0x0f8d
  blank
  blank
  }

  Any call to the above lootlist would have a 8/10 or 80% chance of spawning a reagent as loot, and a 2/10 or 20% chance of spawning nothing. However, inserting additional lines of specific entries just to adjust the drop rate in a particular lootlist feels a bit hacky, so... let's use weights instead!

  #### Weighted Randomization

  Both LOOTLIST and ITEMLIST sections support weighted randomization, which basically means we can assign a "weight" to each entry in a list, to determine the probability of each entry being picked. This allows us to eliminate the need for multiple duplicate entries! Example:

  [LOOTLIST gianticeserpent]
  {
  95|blank
  5|glacialstaff
  }

  For this lootlist, which is used by Giant Ice Serpents to provide players who slay them with a chance to get a Glacial Staff, we've assigned a weight of 5 to the glacialstaff entry, and a weight of 95 to the blank entry. Since those conveniently sum up to 100, we can pretend the values represent the direct chance of each entry being selected, but that's not always the case. We could have used values like 324 and 92393 instead, and it would still work - but a bit harder to convert in our minds to percentages!

  #### What about Itemlists? How do they differ from lootlists?

  While lootlists serve only a specific purpose - adding loot to an NPC's backpack, the more general itemlists are multi-purpose, and are used in a variety of features in UOX3, such as when adding newbie items for freshly created player characters, by region spawners when spawning random items in specific regions of the game world.

  Like lootlists, itemlists support the special "blank" entry, and weighted randomization, but unlike lootlists, items from itemlists can also be added directly in-game by GMs, using the 'add item [itemlist] command. Example: 'add item listobject6 will add a random musical instrument in-game.

  Unlike the LOOT tag, which can add X amount of random items from a lootlist, the PACKITEM tag will, if supplied a number as additional parameter, add X amount of the same randomly chosen item from the specified itemlist. In other words, PACKITEM=reagents,10 would NOT add 10 random reagents, but a stack of 10 of one randomly selected reagent.

  Itemlists are setup in pairs of lists and objects. Example:

  //Instruments
  [ITEMLIST 6]
  {
  0x0e9c
  0x0e9d
  0x0e9e
  0x0eb1
  0x0eb2
  0x0eb3
  0x0eb4
  }
  // Instruments
  [listobject6]
  {
  itemlist=6
  }

  Instead of referring to the itemlist directly, one refers to an object associated with the itemlist, which in the above example would be listobject6, which then refers to the specified itemlist.

  #### onDeath JS Event

  For a more custom approach to NPC loot, with more control over what kind of items drop and under which circumstances, you can make use the JS Event onDeath in a script attached to an NPC, which triggers for NPCs upon death and lets you defined your own rules for what should happen. For more information on how to setup JS scripts, check the Scripting - JS Engine section of this document!

- NPC Movement and Pathfinding

  ### WanderModes Overview

  The movement of NPCs in UOX3 is largely controlled by a property of NPCs called wanderMode. This property can be controlled to some degree through NPC setup in the DFNs (more on that below), but it's also dynamically altered at run-time based on the state of the NPC and what they're supposed to be doing.

  For instance, a player's pet who is given the pet command "follow me", will have its wanderMode altered to follow (wanderMode 1), and will follow that player until another command is used or another event takes place that cause its wanderMode to be altered.

  An Orc that sees and wants to attack a player also goes into the follow wanderMode, and will attempt to follow the player until they get into range and can perform their attack. However, should the player deal enough damage to the Orc, it might instead enter the flee wanderMode (wanderMode 6) and try to escape with its life.

  Another wanderMode - pathfind (wanderMode 7) - is a temporary wanderMode set by UOX3 that functions similarly to the follow mode, but instead of continuing to follow someone indefinitely, it stops and reverts back to its original wanderMode (whatever that might be) when it reaches the intended target (or if it fails to pathfind there).

  Basic vs Advanced (A*) Pathfinding

  By default, the advanced pathfinding setting is enabled for NPCs in UOX3. This mode of pathfinding utilizes the popular A* algorithm to find the shortest paths NPCs need to take in order to reach their intended location. This setting can be enabled or disabled via the ADVANCEDPATHFINDING flag in UOX.INI, though it is recommended to leave this setting enabled unless experiencing performance drops due to too many/too heavy pathfinding calculations.

  ### Controlling NPC WanderMode through DFNs

  Some of these wanderModes are used almost exclusively by UOX3's internal code (like the pathfind and follow modes), while others can be set as default modes for NPCs in the DFNs via the npcwander DFN tag. Let's look at the most common options for that tag:

  npcwander=0 (None)
  The most basic of wanderModes. Essentially, the NPC has no default mode of movement and will stand still on the spot after spawning until something causes its wanderMode to be altered (like being attacked). Once such an event stand, they once again become motionless.

  npcwander=2 (Free)
  The popular wanderMode for free-spirited NPCs who like to roam wherever the wind takes them. NPCs with this wanderMode will move around randomly, with no restrictions on direction or distance. There's no saying where they'll end up!

  npcwander=3 (Box)
  NPCs with this wanderMode are unable to 'think outside the box'. The box is their entire life; if there's a world beyond the box, the NPC either doesn't know about it - or doesn't care! However, if provoked, they might leave their box for a limited time, before returning should the situation calm down. This wanderMode requires some additional setup (see below).

  Additional Setup for Box WanderMode

  Usage of the "box" wanderMode (3) requires the following additional tags setup in the DFN, in order to define a bounding box that restricts the NPC's movement:

  fx1=-1 / fixedXCoordinate
  Set to -1 to use the NPC's spawn location combined with a "radius" (fx2 if specified, otherwise defaults to 10) to determine the farthest number of tiles NPC is allowed to move in directions east and west from spawn point. Can also be given a positive value to set a fixed X1 coordinate for the bounding box.

  fy1=-1 / fixedYCoordinate
  Set to -1 to use the NPC's spawn location combined with a "radius" (fx2 if specified, otherwise defaults to 10) to determine the farthest number of tiles NPC is allowed to move in direction north and south from spawn point. Can also be given a positive value to set a fixed Y1 coordinate for the bounding box.

  fx2=radius / fixedXCoordinate
  If fx1 and fy1 are set to -1, any positive value given for fx2 will act as a "radius" determining how far in each direction from the spawn point (east, west, north, south) NPC is allowed to move. If fx1 and fy1 have positive values (fixed coordinates), fx2 will be used to set a fixed X2 coordinate for the bounding box.

  fy2=fixedYCoordinate
  Only used when setting up bounding box with fixed coordinates, and is used to set the Y2 coordinate for said bounding box.

  npcwander=4 (Circle)
  Unlike their 'square' peers in wandermode 3, NPCs setup with wanderMode 4 have a more rounded taste, and embrace a lifestyle entirely without corners. They're all about circles! However, if provoked, they might leave their precious circle for a limited time, before returning should the situation calm down. This wanderMode requires some additional setup (see below).

  Additional Setup for Circle WanderMode

  Usage of the "circle" wanderMode (4) requires the following additional tags setup in the DFN, in order to define a bounding circle that restricts the NPC's movement:

  fx1=#
  Determines the X coordinate for the center of the bounding circle that restricts the NPC's wandering. If set to -1, will instead get the X coordinate from the NPC's spawn point.

  fy1=#
  Determines the Y coordinate for the center of the bounding circle that restricts the NPC's wandering. If set to -1, will instead get the Y coordinate from the NPC's spawn point.

  fz1=#
  Determines the Z (height) coordinate for the center of the bounding circle that restricts the NPC's wandering. NPC's bounding circle is considered valid if NPC is within a Z of 5 from this defined value.

  fx2=#
  Radius (in tiles) of the bounding circle that restricts the NPC's wandering.

  npcwander=5 (Frozen)
  NPCs in wanderMode 5 are cool as cucumbers, so cool, in fact, that they remain frozen in place on the same spot, unable to move. Come hell or high water, they will remain steadfast and stick to their spot no matter what.

  ### Altering WanderMode through JavaScript

  In addition to DFNs and code, an NPC's wanderMode can also be adjusted in JavaScripts used with UOX3's JS Engine, either via JS Methods for characters like Wander( x1, y1, x2 (radius), y2 ) and Wander ( x1, y1, radius ), or the wandertype JS property for characters. See the UOX3 JS Docs for more details on syntax and some examples!

- Race System

  ### Races in UOX3

  The race system in UOX3 is integrated with both player and NPC characters, and offers numerous options for customizing the behaviour and properties of each race, like taking double damage from silver weapons, dealing more damage with a particular weapon skill, or being allied to or the sworn enemy of another race.

  By default, UOX3 is setup to work with the default player races that can be selected in the UO client's character creation (depending on client version) - i.e. humans, elves and gargoyles - and will automatically assign players to the associated race in the race system, but there's nothing preventing a shard admin from creating multiple other player races, and to provide players with other means of selecting a race for their character.

  Some default races have also been setup for monsters, like Orcs, Ratmen, Undead and Daemons (and more), while animals are generally divided into some predefined Predator and Animal races (with a few other special cases for Birds, Arachnids, etc).

  ### How does it work?

  Each race in UOX3 is setup in its own [RACE #] section of UOX3/dfndata/race/races.dfn, which contain the various properties, bonuses and penalties associated with the race. For a full list of properties available in the race system, check the Race DFN Tags portion of the DFN Tag Overview section of this document.

  A few example race sections

  [RACE 0]
  {
  NAME=Human
  STRCAP=100
  DEXCAP=100
  INTCAP=100
  PLAYERRACE=0
  BANEQUIPLIST=1
  BANEQUIPLIST=2
  }

  Race 0 is the "default" UOX3 player race, which is applied automatically to all newly created (human) player characters, as well as any NPCs that have no other race specified. Here it is setup with stat caps that define the max amount of strength, dexterity and intelligence a player can get, as well as some entries for banned equipment - stuff humans are not allowed to equip.

  [RACE 1]
  {
  PARENTRACE=0
  NAME=Elf
  PLAYERRACE=0
  BANEQUIPLIST=2
  }

  The second default player race is "Elf", which applies automatically to all newly created elf player characters. Whether this race is used or not is dependent on whether the shard uses a client version that has elves as part of the character creation process. This race is setup with a PARENTRACE tag that points to race 0, meaning that in addition to any custom properties defined, it will also inherit the properties of the parent race. Note that any inherited properties can be overridden by redefining the same property for the child race, and the terms "parent race" and "child race" in this context only applies to the logic of inheriting properties, and has no other gameplay or player-facing relevance.

  [RACE 2]
  { // Player
  PARENTRACE=0
  NAME=Gargoyle
  PLAYERRACE=0
  RACIALAID=3
  ALLOWEQUIPLIST=0
  ALLOWEQUIPLIST=2
  }

  The third and last default player race is "Gargoyle", which applies automatically to all newly created gargoyle player characters. As with the elf race, this is dependent on the server supporting a client version that has this race included in the character creation process. This race has been setup with a RACIALAID tag, which points to the monster-version of the gargoyle race (see below). This means gargoyle players will see monster gargoyles as allies in the game, which will not automatically attack the players as they might players belonging to other races. Additionally, this race has some entries to whitelist certain equipment lists, allowing gargoyle players to equip any items from these lists.

  [RACE 3]
  { // Monster
  NAME=Gargoyle
  PLAYERRACE=1
  RACIALENEMY=1
  RACIALAID=3
  }

  The first and only monster race listed in this example, the monster-variant of the gargoyle race has been setup as an ally to the player-variant of the gargoyle race, and as an enemy of the elven race. When two races are set as enemies of one another, members of those races can freely attack each other without any negative consequences to things like the reputation system and criminal flagging, and killing an enemy would not result in a murder count. NPC members of a race will attack members of enemy races on sight.

  NPCs - whether monsters, animals, shopkeepers or adventurers - can be assigned as members of a particular race using the RACE=# DFN tag, which can be added to a given NPC's DFN section in its relevant file under UOX3/dfndata/npc/. For example, monster gargoyles (found in UOX3/dfndata/npc/gargoyles.dfn) are setup with a RACE=3 tag, with the value 3 referring to the race ID for the monster-variant of the gargoyle race. Similarly, any undead NPCs are setup with a RACE=11 tag, which matches up with the "undead" race in races.dfn - which has a race ID of 11.

  ### Slayer Weapons/Double Damage to Undeads

  Any weapon can be setup as a "slayer weapon" - i.e. a weapon that deals double damage against members of a particular race. Historically in UO, the first such weapons were weapons with a "silver" property, which dealt double damage to any undead NPCs. In UOX3, any weapon can be setup with this effect simply by adding a RACE=# tag to the weapon's item DFN section under UOX3/dfndata/items/, which will then cause said weapon to deal double damage to members of whichever race whose ID matches up with the value used in the weapon's RACE tag.

  ### Racial Combat Mods

  Racial combat mods are bonuses or penalties applied to skills during skill checks, or during calculations of base damage dealt when attacking someone with a given weapon-skill in combat. These modifiers apply to characters who are members of a race that has been setup with skill tags such as [SKILLNAME]G=# (bonus) or [SKILLNAME]L=# (penalty) - where # points to one of the MOD# entries in this section.

  Racial Combat Mods

  Example: A race setup with a SWORDSMANSHIPG=3 tag will have a 20% bonus applied to any Swordsmanship skill checks, and will also receive a 20% bonus to base damage during combat when wielding a sword, before any other damage modifiers are applied. If SWORDSMANSHIPL=3 was used instead, it would be a 20% penalty instead of a bonus.

  Example of default [COMBAT MODS] setup in dfndata/race/races.dfn, along with a couple of examples how to make use of them:

      [COMBAT MODS]
      {
      MODCOUNT=4
      MOD0=0
      MOD1=50
      MOD2=100
      MOD3=200
      }

      [RACE 0]
      {
      NAME=Human
      STRCAP=100
      DEXCAP=100
      INTCAP=100
      PLAYERRACE=0
      BANEQUIPLIST=1
      BANEQUIPLIST=2
      SWORDSMANSHIPG=2 // Uses MOD2, i.e. 10.0% bonus to swordsmanship
      FENCINGL=1 // Uses MOD1, i.e. 5.0% penalty to fencing
      }

  ### Races and Equipment Restrictions

  When setting up player races, it can be useful to have the option to restrict who can equip certain equipment - either because the equipment in question only works with certain character models (like Gargoyles), or to setup visual styles unique to each race. Either way, the race system supports this, via the ALLOWEQUIPLIST and BANEQUIPLIST tags, and associated [EQUIPLIST #] equipment lists.

  #### Allowing or Banning Equipment Lists

  The ALLOWEQUIPLIST and BANEQUIPLIST tags give shard admins the option to specify which equipment lists (see below) should be allowed or disallowed for each individual race in the race system. A given race can be setup with multiple of each tag, to allow or disallow multiple equipment lists.

  By default, the "human" player race has been setup with two banned equipment lists (BANEQUIP=1 and BANEQUIP=2). Those lists contain items only usable by Elves (for traditional reasons), and items only usable by Gargoyles (for technical reasons):

  Details of race with banned equipment

  [RACE 0]
  {
  NAME=Human
  STRCAP=100
  DEXCAP=100
  INTCAP=100
  PLAYERRACE=0
  BANEQUIPLIST=1
  BANEQUIPLIST=2
  }

  #### Equipment Lists

  Equipment lists for races can by default be found at the bottom of UOX3/dfndata/race/races.dfn, and a typical list will consist of a [EQUIPLIST #] header, and a series of ITEMS tags that list out all the item IDs that make up the equipment list.

  In the below example, each ITEMS tag contains a different "sub-category" of equipment, but this is just done to make it easier to find specific items in the list (in theory, all items in an equipmentlist could be setup in the same ITEMS tag). When UOX3 starts up, all the items in a given equipment-list are loaded into memory, and from there on referenced whenever a player attempts to equip a particular piece of equipment to see if the race they belong to allows it.

  Example of an equipmentlist

  // Common Equipment, usable by all
  [EQUIPLIST 0]
  {
  // whips
  ITEMS=0xA289,0xA28A,0xA28B,0xA291,0xA292,0xA293
  // Tools
  ITEMS=0x0E85,0x0E86,0x13E3,0x13E4
  // Robe & Arcane Robe
  ITEMS=0x1F03,0x1F04,0x26AE
  // Crook
  ITEMS=0x0E81
  // Rings/Bracelet
  ITEMS=0x1086,0x108A,0x1F06,0x1F09
  }

- Regions

  More details on UOX3 region system coming here soon! Until then, check out UOX3/dfndata/regions/regions.dfn for examples.

- Skill and Stat Gain

  The gain of skills and stats in UOX3 is governed by a system setup in UOX3/dfndata/skills/skills.dfn, where each skill has a setup similar to this:

  // Alchemy
  [SKILL 0]
  {
  NAME=ALCHEMY
  STR=0
  DEX=50
  INT=50
  SKILLPOINT=0,75,50
  SKILLPOINT=100,60,30
  SKILLPOINT=200,45,25
  SKILLPOINT=300,40,20
  SKILLPOINT=400,35,15
  SKILLPOINT=500,30,5
  SKILLPOINT=600,25,5
  SKILLPOINT=700,20,0
  SKILLPOINT=800,15,0
  SKILLPOINT=900,10,0
  SKILLPOINT=990,5,0
  SKILLPOINT=1000,0,0
  MADEWORD=mixed
  (optional)SKILLDELAY=10
  }

  The STR, DEX and INT tags determine how likely those stats are to increase when the skill is used, as well as how much impact they have on the potential success of skill checks if the UOX.INI setting STATSAFFECTSKILLCHECKS is enabled.

  SKILLPOINT tags work in this way:

  - The first value is the skill level at which this entry takes effect.
  - The second value is the chance to gain skill on success.
  - The third value is the chance to gain skill on failure.
  - The fourth (optional) value is the amount to gain on success - defaults to 1 (0.1) points if nothing else is specified

  Each additional SKILLPOINT entry sets a ceiling for the previous one. Thus entries should be created for every step you wish there to be, to gradually slow down skill gain. By default these steps are: 0-100, 100-200, 200-300, 300-400, 400-500, 500-600, 600-700, 700-800, 800-900, 900-990, 990-1000. Note that all skill values are *10, thus 100 instead of 10.0

- Spawn Objects

  UOX3's Spawn Object system lets shard admins setup item or NPC spawns in-game using GM commands, or setup predefined spawn objects in the DFNs that GMs can then drop at any location where they want something to spawn. Examples of such predefined spawn objects can be found in the GM 'add menu, under GM Menu > Spawners. If adding spawn objects via this menu, drag and drop the spawn object from your backpack to the ground to activate the spawn cycle. If you are unable to move it from your inventory, try using the 'allmove on command first!

  Unlike objects spawned via Spawn Regions, ones spawned from Spawn Objects have a persistent state and will be saved during world saves and are loaded again if server restarts.

  Four main types of spawn objects are available:

  #### Item Spawner

  Spawn Objects of item type 61 (IT_ITEMSPAWNER) will spawn items at the spawn object's exact location.

  Example DFN Setup for an Item Spawner

  Here's an example of an Item spawner that could be defined in a DFN file like dfndata/items/gmmenu/spawners.dfn. Like other spawner objects, it inherits some properties from a base_spawner, to save on the need to redefine these common properties for each individual spawner (the base_spawner itself, meanwhile, inherits properties from a base_item object):

  [base_spawner]
  {
  get=base_item // Inherit default properties from base_item object
  id=0x1F14 // ID of spawner object's visuals (displayed for GMs only)
  weight=50000 // Defines weight of spawn object (500.00 stones)
  interval=1 5 // Defines how often spawn object spawns another Item
  visible=1 // Marks spawn object as only being visible to GMs
  decay=0 // Marks spawn object as non-decayable
  movable=2 // Marks spawn object as only being movable by GMs
  }

  [reagentspawner]
  {
  get=base_spawner // Inherit properties from base_spawner
  name=Reagent Spawner // Internal name of spawner object, for GM/Admin use only
  type=61 // Type 61 marks object as an Item Spawner
  spawnobj=bagofreagents // Specifies script section ID of Item to spawn
  }

  After a spawner has been setup in this manner (and DFNs have been reloaded), the spawn object ("reagentspawner" in this case) can be added to the 'add menu for GMs to access (via itemMenu.dfn and itemMenu.bulk.dfn), or can be added to the world directly using the 'add spawner reagentspawner command. The spawned object will be invisible and immovable to normal players, and will immediately start spawning bags of magical reagents. Note that Item Spawners, unlike NPC Spawners, do not support specifying an amount of items to spawn - these are restricted to 1 per Item Spawner, to avoid stacking multiple of same item on the same tile.

  #### NPC Spawner

  Spawn Objects of item type 62 (IT_NPCSPAWNER) will spawn NPCs at the spawn object's exact location.

  Example DFN Setup for a predefined NPC Spawner in DFNs

  Here's an example of an NPC spawner defined in dfndata/items/gmmenu/spawners.dfn. Like other spawner objects, it inherits some properties from a base_spawner, to save on the need to redefine these common properties for each individual spawner (the base_spawner itself, meanwhile, inherits properties from a base_item object):

  [base_spawner]
  {
  get=base_item // Inherit default properties from base_item object
  id=0x1F14 // ID of spawner object's visuals (displayed for GMs only)
  weight=50000 // Defines weight of spawn object (500.00 stones)
  interval=1 5 // Defines how often spawn object spawns another NPC
  visible=1 // Marks spawn object as only being visible to GMs
  decay=0 // Marks spawn object as non-decayable
  movable=2 // Marks spawn object as only being movable by GMs
  }

  [orcspawn]
  {
  get=base_spawner // Inherit properties from base_spawner
  name=Orc Spawner // Internal name of spawner object, for GM/Admin use only
  type=62 // Type 62 marks object as a NPC Spawner
  spawnobj=orc // Specifies script section ID of NPC to spawn
  amount=3 // Max cap on amount of NPCs spawned and alive at the same time
  }

  After a spawner has been setup in this manner (and DFNs have been reloaded), the spawn object ("orcspawn" in this case) can be added to the 'add menu for GMs to access (via itemMenu.dfn and itemMenu.bulk.dfn), or can be added to the world directly using the 'add spawner orcspawn command. The spawned object will be invisible and immovable to normal players, and will immediately start spawning orcs.

  #### Area Spawner

  Spawn Objects of item type 69 (IT_AREASPAWNER) will spawn NPCs in a radius centered on the spawn object's location.

  Example DFN Setup for an Area Spawner

  Here's an example of an Area Spawner that could be defined in a DFN file like dfndata/items/gmmenu/spawners.dfn. Like other spawner objects, it inherits some properties from a base_spawner, to save on the need to redefine these common properties for each individual spawner (the base_spawner itself, meanwhile, inherits properties from a base_item object):

  [base_spawner]
  {
  get=base_item // Inherit default properties from base_item object
  id=0x1F14 // ID of spawner object's visuals (displayed for GMs only)
  weight=50000 // Defines weight of spawn object (500.00 stones)
  interval=1 5 // Defines how often spawn object spawns another Item
  visible=1 // Marks spawn object as only being visible to GMs
  decay=0 // Marks spawn object as non-decayable
  movable=2 // Marks spawn object as only being movable by GMs
  }

  [ratman_area_spawner]
  {
  get=base_spawner // Inherit properties from base_spawner
  name=Ratman Area Spawner // Internal name of spawner object, for GM/Admin use only
  type=69 // Type 69 marks object as an Area Spawner
  spawnobj=ratman // Specifies script section ID of NPC to spawn
  amount=3 // Max cap on amount of NPCs spawned and alive at the same time
  more=0x00000505 // Last 4 digits represent max x/y offsets for spawner, i.e. how far in each direction with spawner as center can NPCs be spawned (can also be specified as more=0x00 0x00 0x05 0x05 for better readability or using decimal values more=0 0 5 5)
  }

  After a spawner has been setup in this manner (and DFNs have been reloaded), the spawn object ("ratman_area_spawner" in this case) can be added to the 'add menu for GMs to access (via itemMenu.dfn and itemMenu.bulk.dfn), or can be added to the world directly using the 'add spawner ratman_area_spawner command. The spawned object will be invisible and immovable to normal players, and will immediately start spawning ratmen at a random interval between the min and max minutes specified in the interval tag.

  #### Container Spawner

  Spawn Objects of type 63 (IT_SPAWNCONT), 64 (IT_LOCKEDSPAWNCONT) and 65 (IT_UNLOCKABLESPAWNCONT) are setup as containers with items spawning inside at regular intervals. Can be setup to auto-lock whenever an item respawns, or be set to never lock at all.

  Example DFN Setup for a Spawn Container

  Here's an example of a Spawn Container that could be defined in a DFN file like dfndata/items/gmmenu/spawners.dfn. Like other spawner objects, it inherits some properties from a base_spawner, to save on the need to redefine these common properties for each individual spawner (the base_spawner itself, meanwhile, inherits properties from a base_item object). Note that a valid container ID must be used for Spawn Containers, or players will be unable to open them to get at the loot inside.

  [base_spawner]
  {
  get=base_item // Inherit default properties from base_item object
  id=0x1F14 // ID of spawner object's visuals (displayed for GMs only)
  weight=50000 // Defines weight of spawn object (500.00 stones)
  interval=1 5 // Defines interval for how often (in minutes) spawn object spawns another Item
  visible=1 // Marks spawn object as only being visible to GMs
  decay=0 // Marks spawn object as non-decayable
  movable=2 // Marks spawn object as only being movable by GMs
  }

  [spawn_container]
  {
  get=base_spawner // Inherit properties from base_spawner
  id=0x0e40 // ID of container to visually represent spawner object
  visible=0 // Unlike other spawners, we want this one to be visible, so override tag!
  name=Spawn Container // Internal name of spawner object, for GM/Admin use only
  type=63 // Type 63 marks object as a Spawn Container
  spawnobj=bagofreagents // Specifies script section ID of Item to spawn
  spawnobjlist=listobject69 // Alternate way of specifying object to spawn. This points to a listobject for an itemlist in UOX3/dfndata/items/itemlists/itemlists.dfn, and will spawn random treasure inside the container each time it respawns.
  amount=1 // Defines max amount of items to spawn in the container (1 per spawn interval)
  morez=0x01 0x32 0x34 0x45 // If first value is set to 1, container is trapped. Second value (0x32 = 50) determines damage dealt if trap is sprung. Third value represents minimum skill to remove trap, while fourth value represents "max" skill beyond which removal is guaranteed.
  }

  After a spawner has been setup in this manner (and DFNs have been reloaded), the spawn object ("spawn_container" in this case) can be added to the 'add menu for GMs to access (via itemMenu.dfn and itemMenu.bulk.dfn), or can be added to the world directly using the 'add spawner spawn_container command. The spawned object will be visible, but immovable to normal players, and will immediately start spawning items inside the container at a random interval between the min and max minutes specified in the interval tag.

  As soon as an item has spawned inside the Spawn Container, the item type of the spawn object will change from 63 (IT_SPAWNCONT) to 64 (IT_LOCKEDSPAWNCONT) and players will need to unlock it using lockpicks or the Magic Unlock spell before they can get to the treasure inside. Upon being unlocked, the type will reset back to 63 (IT_SPAWNCONT).

  If you don't want the Spawn Container to be locked, even after spawning/respawning items, change it's type to 65 (IT_UNLOCKABLESPAWNCONT) instead. By doing this, the container will not automatically lock itself when a new item is spawned.

- Spawn Regions

  #### Spawn Regions

  UOX3's regional spawning system allows the spawning of thousands of NPCs and items without affecting world saving or loading times negatively, as anything spawned through this system is not saved, and will not persist through a server restart, but will respawn on every server startup. This is useful for generic monster spawns, NPC shopkeepers and townsfolk, random item spawns like magic reagents, etc.

  The spawning system is setup through UOX3/dfndata/spawn/spawn.dfn, and an example of a setup for this can be seen below, or by examining the Community-made spawn.dfn file.

  Example Setup for a Spawn Region

  The following spawn region was taken from the above-mentioned Community-made spawn.dfn file, and is responsible for spawning orcs in the Yew Orc Fort:

  [REGIONSPAWN 283]
  {
  NAME=Yew Orc fort // Internal name for spawn region
  NPC=orc // npcSectionID to spawn from NPC DFNs
  MAXNPCS=10 // Max amount of NPCs spawn region is allowed to spawn
  X1=626 // Top left corner of coordinate set
  Y1=1481 // Top left corner of coordinate set
  X2=638 // Bottom right corner of coordinate set
  Y2=1487 // Bottom right corner of coordinate set
  WORLD=0 // Worldnumber to apply spawn region in
  MINTIME=5 // Min time between respawns
  MAXTIME=15 // Max time between respawns
  CALL=5 // Max amount of orcs to spawn during each respawn
  }

  For a full list of DFN tags supported in Spawn Regions, take a look at DFN Tag Overview > SpawnRegion DFN Tags!

  #### Predefined Spawns

  In addition to dedicated spawn regions, this system also supports setting up generic, predefined spawns that can be applied directly in regions in UOX3/dfndata/regions/regions.dfn. The benefit of such predefined spawns is that they can be re-used in different regions, and can piggy-back on the regions that already exist instead of having to create new dedicated spawn regions with coordinates etc.

  Example Setup for a Predefined Spawn

  The following section is added either at the bottom of an existing DFN file in UOX3/dfndata/spawn/ (below spawnregion entries), or in its own, separate file in the same folder:

  [PREDEFINED_SPAWN orcInvasion]
  {
  NAME=Orc Spawn
  NPCLIST=allorc
  MAXNPCS=50
  MINTIME=0
  MAXTIME=1
  CALL=10
  }

  This is then applied to specific sets of coordinates (X1, Y1 -> X2, Y2) within a region in UOX3/dfndata/regions/regions.dfn by adding a SPAWN=orcInvasion tag below the coordinate sets in question:

  [REGION 4]
  {
  NAME=Britain's farmlands
  MUSICLIST=21
  GUARDED=1
  GUARDLIST=guard
  GUARDOWNER=The Town
  MAGICDAMAGE=0
  MARK=1
  GATE=1
  RECALL=1
  X1=1085
  Y1=1530
  X2=1200
  Y2=1695
  SPAWN=orcs
  X1=1200
  Y1=1555
  X2=1295
  Y2=1695
  SPAWN=orcs
  X1=1295
  Y1=1695
  X2=1330
  Y2=1850
  SPAWN=orcs
  X1=1100
  Y1=1695
  X2=1295
  Y2=1915
  SPAWN=orcs
  }

  Note that in this case, the guards have also been disabled via the GUARDED=0 line, to prevent the orcs spawning in the Britain farmlands from getting instant-killed by the town guards!

- Spellcasting NPCs

  The spattack DFN tag in NPC DFN's defines the maximum spell circle from which an NPC will be able to cast spells in combat. A value of 8 means the NPC will be able to cast spells from circles 1 through 8, while a value of 5 means the NPC can cast spells from circles 1 to 5.

  Notably, NPC's can currently only cast certain spells, and these will be chosen at random when the NPC is able to cast spells during its combat cycle - defined by the spdelay DFN tag, which defines the minimum amount of seconds between each time they can cast spells in combat. This can further be modified by a uox.ini setting - NPCSPELLCASTSPEED - which modifies the spellcasting delay for NPCs on a global basis.

  Following is a list of spells an NPC can cast:

  - Circle 1: Clumsy, Feeble Mind, Heal (Self), Magic Arrow, Reactive Armor (self ), Cure (Self if poisoned), Weaken
  - Circle 2: Harm
  - Circle 3: Fireball, Poison
  - Circle 4: Curse, Greater Healing (Self), Lightning, Mana Drain
  - Circle 5: Blade Spirits, Magic Reflection (Self), Mind Blast, Paralyze
  - Circle 6: Dispel (if fighting a summoned creature), Energy Bolt, Explosion, Mass Curse
  - Circle 7: Chain Lightning, FlameStrike, Mana Vampire, Meteor Swarm
  - Circle 8: Earthquake, Energy Vortex
- Teleport Locations

  Fixed teleport locations can be setup via UOX3/js/teleport.scp using the following format:

      		From 			To 		Optional
      		X,Y,Z(or ALL), 	X,Y,Z  	[,World,World]

  Example:

      		[TELEPORT ENTRIES]
      		{
      		ENTRY=3,        128,    All,    257,    784,    64,     3,4 //  [Yomotsu_Mines_Exit]
      		ENTRY=3,        1267,   All,    666,    928,    -80,    2,2 //  [Ankh_Dunegon_Exit]
      		}

  Notes:

  - Entries without world-coordinates will work in _all_ worlds!!!1one.Entries marked with have been verified as working
  - Entries marked with ???? need to be verified by someone who knows the location
  - Entries with _mg_ in the description are moongate locations. Comment out if you plan to use actual moongates
- Townstones

  UOX3 comes with a system for townstones that allows players to setup their own player-run governments in different regions of the world.

  The basics of the system is as follows:

  - Player gets hold of a Townstone Deed, and uses it while in a given region of the world to found a new Town.
  - Using the Townstone Deed will place a Townstone on the ground, which the player can interact with to see details of the newly established Town

  List of features in Townstones System:

  - Townstones are based on regions
  - Multiple Townstones may be placed in one region, but they all give info about the same region.
  - Townstones are of two types (automatically determined) based on the information in regions.scp file.
  - Players may become a resident of a town, wilderness, or none at all.
  - Residents of a town may freely leave residency to none.
  - If a player is a resident of another town then the one he/she wants to join, then they will automatically leave the prior town upon their joining the new town.
  - Residents of a town (other then wilderness type) may vote for mayor.
  - Residents of a town may vote however often they wish, but votes are not tallied until the 'election day'.
  - Residents of a town may opt to display the town they are from on their paperdoll. If they choose to display their town title, their reputation title will not be shown (may be changed at a future date).
  - The elected Mayor is forced to display their town title on their paperdoll. It is in the format of "Mayor of , "
  - The elected Mayor has "Mayor" prefixed to their displayname from allnames.
  - If a mayor leaves residency of the town for either none, or another, then a new mayor is automatically detected based on number of votes at that time.
  - Townstones display the current mayor on them.
  - Townstones display the total population for that town.
  - Wilderness regions display 'unruled region' for mayor.
  - Wilderness regions display 'unknown' for population.
  - To cast a vote for Mayor, the person whom the player wants to vote for must be online, and preferably onscreen. (Target based).
  - If voting is 'mis-targeted' then the previous vote is unchanged.
  - Residents may not vote for players who are not a resident of their same town.
  - The player whom a person is currently voting for is displayed on the townstone.

  More details being added soon!

- Weather System

  UOX3 comes with an extensive weather system that ties in with regions and player races.

  More details being added soon!

- World Templates

  World templates are files read and written by the 'decorate save/load/clean/copy commands (see 'decorate command in Command List for full details on syntax), and essentially work as blueprints for world decoration, which can be easily loaded, re-saved after changes/additions or even be transferred between shards.

  These templates contain items such as doors, signs, lights, moongates, teleporters, containers, spawners and "misc" (any other item type), and each of these item types are saved to their own text file, per facet, with a .jsdata file extension. Examples:
  felucca_doors.jsdata
  felucca_containers.jsdata
  trammel_doors.jsdata
  trammel_spawners.jsdata

  UOX3 already comes with a default set of such world template files stored in UOX3/js/jsdata/worldtemplates/, but they are optional to use, and new shard admins can choose between starting out with an empty world or to load the default templates - either select parts of them or in full.

  Through the 'decorate command, shard admins can save out templates to pre-defined files per facet and object-type, or to custom template files where all objects are saved to the same file. Example: 'decorate save myCustomTemplate would save ALL items on ALL facets to a custom template file called "myCustomTemplate.jsdata", which is then stored in UOX3/js/jsdata/worldtemplates. Note that the location of these files might differ for a given UOX3 configuration, depending on whether the SCRIPTDATADIRECTORY in uox.ini has been modified from the default.

  Full list of supported sub-commands for 'decorate

  'decorate save
  Save all items to the default templates, based on objectType and facet
  'decorate save [objectType]
  Save all items of objectType, regardless of facet
  'decorate save [objectType] [facetName]
  Save all items of objectType in the specified facet
  'decorate save [customObjectType] [facetName] x1 y1 x2 y2
  Save all items within specified coordinates on specified facet to file with same name as customObjectType

  'decorate load
  Load all items from the default templates, regardless of objectType and facet
  'decorate load [objectType]
  Load all items of objectType, regardless of facet
  'decorate load [objectType] [facetName]
  Load all items of objectType in the specified facet
  'decorate load [customObjectType]
  Load all items from file with same name as [customObjectType]

  'decorate clean
  Clean up duplicate decorations that might have been loaded/added by accident. Counts as duplicate if item ID, location, type and hue are identical. BEWARE: Might affect player items on a live shard!

  'decorate copy [sourceFacetName] [targetFacetName]
  Copy all items from one facet (sourceFacetName) to another (targetFacetName)

- # Scripting - DFN System

- Introduction to DFN System in UOX3

  DFNs - or "definition files" are essentially "templates" or "blueprints" that define the properties of various objects and systems in UOX3, which can be customized by shard admins with any text editor and be reloaded by UOX3 on the fly (only applies to select types of DFNs).

  List of DFN types available in UOX3, and what they are used for:

  advance

  Location: UOX3\dfndata\advance\advance.dfn
  Used to setup advancement gates/objects that can quickly boost players skills and stats to desired level. See separate feature documentation for more info.

  carve

  Location: UOX3\dfndata\carve\carve.dfn
  Used to setup lists of items that players will gain when carving particular creatures with bladed items.

  colors

  Location: UOX3\dfndata\colors\colors.dfn
  Contains random colorlists that can be used with color tags in various other DFNs to provide random colors for items and NPCs.

  command

  Location: UOX3\dfndata\command\commands.dfn
  Contains setup of roles like Administrator, GM, Counselor and Player, as well as the privileges and access to commands that each role will have.

  create

  Location: UOX3\dfndata\create\*.dfn
  Contains crafting menus with resource costs for crafting each individual item.

  creatures

  Location: UOX3\dfndata\creatures\creatures.dfn
  Used to setup things like sound effects, movement types and more for each creature type in the game.

  harditems

  Location: UOX3\dfndata\harditems\harditems.dfn
  Used to override properties of "hard/raw" (non-scripted) items added to the world. Normally they get all their properties directly from tiledata.mul, but this file allows overriding the properties for such items, to ensure they all get the proper weight they should have, etc.

  house

  Location: UOX3\dfndata\house\house.dfn
  Contains the setup for multis/houses/boats in UOX3, and what items (like doors, or signs) are added along with these when players place them in the world using deeds.

  html

  Location: UOX3\dfndata\html\default_templates.dfn / *.htf
  Used to setup HTML templates for server status, information pages, etc. that can be automatically written by the server on worldsaves. Useful to show status of server on shard homepage, for instance.

  items

  Location: UOX3\dfndata\items\*.dfn
  Contains all item definitions in the game - the scripted versions of "hard" items, these get all their properties set in these definition files instead of from tiledata.mul. Also contains the contents of the menu shown when using the 'add command, lootlists for NPCs, shoplists for NPC shopkeepers, and more.

  location

  Location: UOX3\dfndata\location\location.dfn
  Contains definitions of locations in the world - points of interest that GMs can travel directly to using the 'goplace # command, where # aligns with location IDs in this file.

  maps

  Location: UOX3\dfndata\maps\maps.dfn / tiles.dfn
  maps.dfn is used to define what kind of mapfiles UOX3 should be attempting to load - their names, their sizes, etc. tiles.dfn is used to override tiledata properties of items in the game world - useful for marking unclimbable ladders as climbable, for instance. separate feature documentation for more info.

  menus

  Location: UOX3\dfndata\menus\menus.dfn / polymorph.dfn / tracking.dfn
  Contains various gump menus used in the game, such as menu used by polymorph spell, tracking skill and basic server info gumps.

  misc

  Location: UOX3\dfndata\misc\books.dfn / gumps.dfn / motdtips.dfn
  Contains hardcoded books, message of the day login tips, housing/guild/account management gump menus.

  msgboard

  Location: UOX3\dfndata\msgboard\msgboard.dfn
  Used to setup NPC escort quests. See separate feature documentation for more info.

  newbie

  Location: UOX3\dfndata\newbie\newbie.dfn
  Used to setup newbie items given out to new characters upon creation, based on the skills they choose.

  npc

  Location: UOX3\dfndata\npc\*.dfn
  Contains definitions for all NPCs that can be added in-game; their body IDs, their names, their skills and stats, items equipped (if human), etc. Also contains namelists (namelists.dfn) with random NPC names for humans, orcs, lizardmen, etc.

  race

  Location: UOX3\dfndata\race\races.dfn
  Used to define races in the game (including player-accessible ones); their strengths and weaknesses, their skill bonuses and penalties, and so forth. See separate feature documentation for more info, or lookup Race DFN Tags in DFN Tag Overview for a full list of supported DFN tags for this system.

  regions

  Location: UOX3\dfndata\regions\regions.dfn
  Used to define the various regions of the game world and their properties, like whether they are considered safe zones where no harm can befall the players, whether travel spells are enabled or not, whether the guard system is enabled or not. See separate feature documentation for more info.

  skills

  Location: UOX3\dfndata\skills\skills.dfn
  Contains definitions for all the skills in the game, and their skill/stat advancement rates. See separate feature documentation for more info.

  spawn

  Location: UOX3\dfndata\spawn\spawn.dfn
  Used to setup spawn regions - areas in the world where NPCs of a particular type will spawn, how many of them will spawn, how often, and so forth. See separate feature documentation for more info.

  spells

  Location: UOX3\dfndata\spells\spells.dfn
  Contains definitions for all spells in the game, their requirements in skills, stats and resources, their words of power and other special properties.

  titles

  Location: UOX3\dfndata\titles\titles.dfn
  Used to define skill titles (such as Blacksmith, Tailor, Swordsman), proficiency titles (such as Apprentice, Master, Grandmaster) and fame/karma related titles (such as Glorious, Infamous, Dread).

  weather

  Location: UOX3\dfndata\weather\weather.dfn
  Contains definitions of weather systems, used by the region system to setup different weather across different regions in the game world. See separate feature documentation for more info.

- DFN Tag Overview

  Here you'll find an overview of all DFN tags that can be used in UOX3, depending on context (characters, items, regions, etc.). The DFNs can be safely modified and dynamically reloaded while UOX3 is running, as the only other time UOX3 reads from these files (and never writes) is on server startup. After making a change, simply use the 'reloaddefs command in-game, or console command '7' after unlocking the UOX3 console by pressing '*'.

  Character DFN Tags

  alchemy=[skillpoints] or [lowskill highskill]
  Set Alchemy skill (0 - 1000)

  anatomy=[skillpoints] or [lowskill highskill]
  Set Anatomy skill (0 - 1000)

  animallore=[skillpoints] or [lowskill highskill]
  Set Animal Lore skill (0 - 1000)

  archery=[skillpoints] or [lowskill highskill]
  Set Archery skill (0 - 1000)

  armslore=[skillpoints] or [lowskill highskill]
  Set Arms Lore skill (0 - 1000)

  backpack
  If tag is present, add backpack to NPC

  begging=[skillpoints] or [lowskill highskill]
  Set Begging skill (0 - 1000)

  blacksmithing=[skillpoints] or [lowskill highskill]
  Set Blacksmithing skill (0 - 1000)

  bowcraft=[skillpoints] or [lowskill highskill]
  Set Bowcraft/Fletching skill (0 - 1000)

  bushido=[skillpoints] or [lowskill highskill]
  Set Bushido skill (0 - 1000)

  camping=[skillpoints] or [lowskill highskill]
  Set Camping skill (0 - 1000)

  carpentry=[skillpoints] or [lowskill highskill]
  Set Carpentry skill (0 - 1000)

  cartography=[skillpoints] or [lowskill highskill]
  Set Cartography skill (0 - 1000)

  carve=[carvelist-ID]
  Set section from UOX3/dfndata/carve/carve.dfn to use when adding items for carved/butchered corpses

  chivalry=[skillpoints] or [lowskill highskill]
  Set Chivalry skill (0 - 1000)

  color/colour=[color]
  Set Color by hex-id or decimal value

  colorlist/colourlist=[colorlist-ID]
  Set Colorlist from UOX3/dfndata/colors/colors.dfn to pick random color from list

  colormatchhair/colourmatchhair
  If tag is present, makes color of character's beard (if they have one) same as for their hair

  cooking=[skillpoints] or [lowskill highskill]
  Set Cooking skill (0 - 1000)

  custominttag=[tagname] [value]
  Adds custom JS int tag to character.

  customstringtag=[tagname] [text]
  Adds custom JS string tag to character.

  damage/att=[damage] or [lowdmg highdmg]
  Set damage/attack values - either fixed or random range

  def=[defense] or [lowdef highdef]
  Set Physical-resist/defense value - either fixed or random range

  detectinghidden=[skillpoints] or [lowskill highskill]
  Set Detecting Hidden skill (0 - 1000)

  dex=[statpoints] or [lowstat highstat]
  Set Dexterity stat for NPC - either fixed or random range

  dir=[direction]
  Set default direction upon spawning (NE, E, SE, S, SW, W, NW, N - or RND to randomize)

  elementresist=[fire cold energy poison]
  Set Element-resist stats (0 - 1000 for each stat)

  emotecolour=[color]
  Set the default colour (in hex or decimal) for the NPC's emote text

  enticement=[skillpoints] or [lowskill highskill]
  Set Enticement skill (0 - 1000)

  equipitem=[itemSectionID]
  Equip item with specified itemSectionID from item DFNs

  evaluatingintel=[skillpoints] or [lowskill highskill]
  Set Evaluating Intelligence skill (0 - 1000)

  fame=[fame value]
  Set amount of fame given to/taken from the player if they kill the NPC

  fencing=[skillpoints] or [lowskill highskill]
  Set Fencing skill (0 - 1000)

  fishing=[skillpoints] or [lowskill highskill]
  Set Fishing skill (0 - 1000)

  flag=[neutral/innocent/evil]
  Flag NPC as Neutral, Innocent or Evil

  fleeat=[percentage]
  Set percentage of health at which NPC will start to flee in combat

  fleeingspeed=[movementSpeed]
  Set the speed at which the NPC flees (0.3 by default, lower = faster)

  fleeingspeedmounted=[movementSpeed]
  Set the speed at which the NPC flees when mounted (0.25 by default, lower = faster)

  focus=[skillpoints] or [lowskill highskill]
  Set Focus skill (0 - 1000)

  food=[foodlist-ID]
  Define which food this NPC eats, from UOX3/dfndata/items/foodlists.dfn (primarily used to feed pets)

  forensics=[skillpoints] or [lowskill highskill]
  Set Forensics skill (0 - 1000)

  fx1=[X coordinate]
  Coordinate used with NPC Wander-modes

  fx2=[X coordinate]
  Coordinate used with NPC Wander-modes

  fy1=[Y coordinate]
  Coordinate used with NPC Wander-modes

  fy2=[Y coordinate]
  Coordinate used with NPC Wander-modes

  fz1=[Z coordinate]
  Coordinate used with NPC Wander-modes

  get=[npcSectionID]
  Inherit properties from NPC defined by npcSectionID in NPC DFNs

  gold=[gold] or [mingold maxgold]
  Set the amount of gold this NPC carries - either fixed or random range

  haircolor/haircolour=[color]
  Set the haircolor of the NPC in hex or decimal

  healing=[skillpoints] or [lowskill highskill]
  Set Healing skill (0 - 1000)

  herding=[skillpoints] or [lowskill highskill]
  Set Herding skill (0 - 1000)

  hidamage=[hidamage]
  Set max damage/attack value

  hiding=[skillpoints] or [lowskill highskill]
  Set Hiding skill (0 - 1000)

  hp=[hitpoints] or [lowhp highhp]
  Set starting Hitpoints of NPC when spawned - either fixed or random range

  hpmax=[hitpoints] or [lowhp highhp]
  Set maximum Hitpoints of NPC when spawned - either fixed or random range

  id=[bodyID]
  Set body ID of creature, in hex. Also determines origID property.

  imbuing=[skillpoints] or [lowskill highskill]
  Set Imbuing skill (0 - 1000)

  inscription=[skillpoints] or [lowskill highskill]
  Set Inscription skill (0 - 1000)

  intelligence=[statpoints] or [lowstat highstat]
  Set Intelligence stat for NPC - either fixed or random range

  itemid=[skillpoints] or [lowskill highskill]
  Set Item Identification skill (0 - 1000)

  karma=[karma value]
  Set amount of Karma given to/taken from the player if they kill the NPC

  lockpicking=[skillpoints] or [lowskill highskill]
  Set Lockpicking skill (0 - 1000)

  lodamage=[lodamage]
  Set minimum damage/attack value

  loot=[lootlist-ID] or [lootlist-ID],[amount] or [lootlist-ID],[minamount maxamount]
  Add random loot to NPC based on specified lootlist from UOX3/dfndata/items/lootlists.dfn. Supports (optionally) specifying a fixed amount or a random amount of the specified ID.

  lumberjacking=[skillpoints] or [lowskill highskill]
  Set Lumberjacking skill (0 - 1000)

  macefighting=[skillpoints] or [lowskill highskill]
  Set Macefighting skill (0 - 1000)

  magery=[skillpoints] or [lowskill highskill]
  Set Magery skill (0 - 1000)

  magicresistance=[skillpoints] or [lowskill highskill]
  Set Magic Resistance skill (0 - 1000)

  mana=[statpoints] or [lowstat highstat]
  Set starting Mana of NPC - either fixed or random range

  manamax=[statpoints] or [lowstat highstat]
  Set maximum Mana of NPC - either fixed or random range

  meditation=[skillpoints] or [lowskill highskill]
  Set Meditation skill (0 - 1000)

  mining=[skillpoints] or [lowskill highskill]
  Set Mining skill (0 - 1000)

  musicianship=[skillpoints] or [lowskill highskill]
  Set Musicianship skill (0 - 1000)

  mysticism=[skillpoints] or [lowskill highskill]
  Set Mysticism skill (0 - 1000)

  name=[text]
  Set NPC name

  namelist=[namelistID]
  Set random NPC name based on specified namelist from UOX3/dfndata/npc/namelists.dfn

  necromancy=[skillpoints] or [lowskill highskill]
  Set Necromancy skill (0 - 1000)

  ninjitsu=[skillpoints] or [lowskill highskill]
  Set Ninjitsu skill (0 - 1000)

  notrain
  If tag is present, NPC won't train skills to players

  npcai=[npcAI]
  Set AI of NPC (0 = none, 1 = Healer, 2 = Evil/Monster, 4 = Guard, 5 = Fighter, 6 = Animal, 7 = Dummy, 8 = Banker, 17 = PlayerVendor, 32 = Pet Guard, 88 = Chaotic, 666 = Evil Healer)

  npcwander=[wanderMode]
  Set NPC wander-mode (0 = immobile, 1 = follow target, 2 = wander freely, 3 = wander in box, 4 = wander in circle, 5 = frozen). See NPC Movement and Pathfinding for more details.

  packitem=[itemSectionID] or [itemSectionID],[amount] or [itemSectionID],[minamount maxamount]
  Add specified item from Item DFNs to NPC's backpack (must come after backpack tag!). Supports optional value for amount, or random amount values.

  parrying=[skillpoints] or [lowskill highskill]
  Set Parrying skill (0 - 1000)

  peacemaking=[skillpoints] or [lowskill highskill]
  Set Peacemaking skill (0 - 1000)

  poisoning=[skillpoints] or [lowskill highskill]
  Set Poisoning skill (0 - 1000)

  poisonstrength=[poisonStrength]
  Set poison strength for NPC (1 = weak, 4 = deadly)

  priv=[priv]
  Used to set the NPC's starting privileges. Not working at the moment.

  provocation=[skillpoints] or [lowskill highskill]
  Set Provocation skill (0 - 1000)

  race=[raceID]
  Set Race ID of NPC, from UOX3/dfndata/race/races.dfn.

  reattackat=[percentage]
  Defines percentage of health at which NPC will return to combat if fleeing

  removetrap=[skillpoints] or [lowskill highskill]
  Set Remove Trap skill - either fixed value or random range

  rshopitem=[itemSectionID]
  NPC will purchase item defined here. itemSectionID is from the Item DFNs

  runningspeed=[movementspeed]
  Defines running-speed for the NPC (uses default value from uox.ini setting if not set: 0.2, lower = faster)

  runningspeedmounted=[movementspeed]
  Defines running-speed for the NPC (uses default value from uox.ini setting if not set: 0.12, lower = faster)

  runs
  If tag is present, NPC will play running animations during combat, and will move at runningspeed instead of walkingspeed

  saycolor/saycolour=[color]
  Set NPC speech color in hex or decimal

  script=[scriptID]
  Set scriptID of JS to attach to NPC on creation

  sellitem=[itemSectionID]
  NPC will sell item defined here. itemSectionID comes from Item DFNs

  shopitem=[itemSectionID]
  NPC will have item defined here added to their "already bought"-items pack. itemSectionID from item DFNs

  shopkeeper
  If tag is present, NPC will be turned into a shopkeeper on creation

  shoplist=[NPC will buy/sell items defined in the shoplist from UOX3/dfndata/items/shoplist.dfn]
  Not in use.

  skill=[skillNum] [skillValue]
  Set specified skill for NPC (skillValue 0 - 1000)

  skin=[color]
  Defines skin-color for NPC

  skinlist=[colorlistID]
  Randomly set NPC skincolor based on colorlist in UOX3/dfndata/colors/colors.dfn

  snooping=[skillpoints] or [lowskill highskill]
  Set Snooping skill (0 - 1000)

  spadelay=[seconds]
  Set minimum delay in seconds between each time an NPC can cast spells in combat

  spattack=[spellCircle]
  Defines which spellcircles of spells the NPC has access to.

  spellweaving=[skillpoints] or [lowskill highskill]
  Set Spellweaving skill (0 - 1000)

  spiritspeak=[skillpoints] or [lowskill highskill]
  Set Spirit Speak skill (0 - 1000)

  split=[0/1]
  If set to 1, NPC will split into two NPCs when hit in combat - if script 3203 is attached!

  splitchance=[percentage]
  Set the chance for NPC to split when hit, if split tag is enabled

  stamina=[statpoints] or [lowstat highstat]
  Set starting Stamina for NPC on creation - either fixed value or random range

  staminamax=[statpoints] or [lowstat highstat]
  Set maximum Stamina for NPC on creation - either fixed value or random range

  stealing=[skillpoints] or [lowskill highskill]
  Set Stealing skill (0 - 1000)

  stealth=[skillpoints] or [lowskill highskill]
  Set Stealth skill (0 - 1000)

  strength=[statpoints] or [lowstat highstat]
  Set Strength of NPC on creation - either fixed value or random range

  swordsmanship=[skillpoints] or [lowskill highskill]
  Set Swordsmanship skill (0 - 1000)

  tactics=[skillpoints] or [lowskill highskill]
  Set Tactics skill (0 - 1000)

  tailoring=[skillpoints] or [lowskill highskill]
  Set Tailoring skill (0 - 1000)

  tamedhunger=[hungerrate percentage]
  Set hunger-rate and chance to become wild (600 default for hungerrate, 30 for chance to go wild!)

  taming=[skillpoints] or [lowskill highskill]
  Set Animal Taming skill (0 - 1000)

  tasteid=[skillpoints] or [lowskill highskill]
  Set Taste Identification skill (0 - 1000)

  throwing=[skillpoints] or [lowskill highskill]
  Set Throwing skill (0 - 1000)

  tinkering=[skillpoints] or [lowskill highskill]
  Set Tinkering skill (0 - 1000)

  title=[text]
  Set NPC's title

  topeace=[skillpoints]
  Set minimum skill to succesfully use peacemaking against this NPC

  toprov=[skillpoints]
  Set minimum skill to succesfully use provocation against this NPC

  totame=[skillpoints]
  Set minimum skill to succesfully tame this NPC

  tracking=[skillpoints] or [lowskill highskill]
  Set Tracking skill (0 - 1000)

  veterinary=[skillpoints] or [lowskill highskill]
  Set Veterinary skill (0 - 1000)

  walkingspeed=[movementspeed]
  Set NPC walk speed (uses default value from uox.ini setting if not set: 0.38, lower = faster)

  walkingspeedmounted=[movementspeed]
  Set NPC walk speed (uses default value from uox.ini setting if not set: 0.3, lower = faster)

  willhunger=[0/1]
  If 1, NPC is affected by hunger, and will never need food.

  wrestling=[skillpoints] or [lowskill highskill]
  Set Wrestling skill (0 - 1000)

  Item DFN Tags

  ac=[armourClass]
  Set armour class of item. Can be used to restrict races from wearing items of certain armour classes, or to identify items as cloth, leather, plate, etc.

  addmenuitem=[itemmenuID,tileID,weightPosition,objectFlags,sectionItemID]
  Automatically add item to add-menu when said menu is generated. Needs to be combined with insertaddmenuitems tag in associated itemmenu inside UOX3/dfndata/ItemMenu.bulk.dfn (BROKEN)

  ammo=[id] or [id][color]
  Used with ranged weapons to specify required ammo. Color is optional

  ammofx=[id] or [id][color][rendermode]
  Used with ranged weapons to specify missile-FX. Rendermodes that can be used:

  - 0 - normal
  - 1 - transparent
  - 2 - additive
  - 3 - dark colors transparent
  - 4 - bright colors transparent
  - 5 - semi transparent
  - 6 - subtractive/negative colors?
  - 7 - inverted colors?

  amount=[amount] or [minamount maxamount]
  Set amount of items - either fixed amount or random range

  att=[lodamage hidamage]
  Used to set minimum and maximum damage values for weapons

  baseweight=[weight]
  Set base-weight of item (100 = 1 stone). Primarily used to keep a reference to the weight of empty containers, before they contain any items

  cold=[0/1]
  If set to 1, marks item with elemental type Cold, which defines the type of damage dealt if it's a weapon

  color/colour=[color]
  Color of item in hex or decimal

  colorlist/colourlist=[colorListID]
  Color of item randomly picked from specified colorList in UOX3/dfndata/colors/colors.dfn

  corpse=[0/1]
  If set to 1, defines item as a corpse!

  creator=[character serial]
  Serial of character that created item. Primarily applied during crafting

  custominttag=[tagname] [value]
  Adds custom JS int tag to character.

  customstringtag=[tagname] [text]
  Adds custom JS string tag to character.

  damage=[lodamage hidamage]
  Same as Att tag. Used to set minimum and maximum damage values for weapons

  damageable=[0/1]
  If enabled, allows client to display healthbar for object, using object's hp/maxhp values as basis. Any changes to a damageable object's health will not be reflected in the client until a stat update has been sent.

  decay=[0/1]
  If set to 1, item decays based on normal item decay rules. If set to 0, it never decays

  def=[defense]
  Set physical resist/armor rating value of item. Primarily used with wearables like clothes, armour, etc.

  dex=[statpoints]
  Minimum dexterity required to equip item

  dexadd=[statpoints]
  Temporary dexterity bonus applied to character while they have item equipped

  dir=[direction]
  Direction, but used to define light pattern/radius (0-56?) for light sources

  disabled=[0/1]
  If set to 1, item is disabled. Primarily used in code to make some items temporarily disabled so they cannot be used again for a short amount of time.

  dispellable
  If tag is present, marks the item as dispellable. Primarily applied to things like magical field spells that can be dispelled (firefields, poisonfields, etc)

  dye
  If tag is present, marks the item as dyeable (with dye tubs)

  elementresist=[fire cold energy poison]
  Set fire, cold, energy and poison resistance values (0 - 1000, where 1000 = 100.0)

  get=[itemSectionID]
  Inherit properties of item with specified itemSectionID from item DFNs

  glow=[0/1]
  Attaches a hidden lightsource to the item to make it appear to glow

  glowbc=[glowColor]
  Sets the color (in decimal or hex) of the glow effect (same as color tag on regular light sources)

  glowtype=[glowType]
  Set the type of glow-effect to use (same as direction tag on regular light sources)

  good=[goodValue]
  Set a category of goods used for the Advanced Trade System

  heat=[0/1]
  If set to 1, marks item with elemental type Heat, which defines the type of damage dealt if it's a weapon

  hidamage=[hidamage]
  Maximum damage value of a weapon (randomized between this and lodamage)

  hp=[hitpoints] or [lowhp highhp]
  Set hitpoints of item - either fixed value or random range

  id=[tileID]
  Set tileID of item art in decimal or hex

  intadd=[statpoints]
  Temporary intelligence bonus applied to character while they have item equipped

  intelligence=[statpoints]
  Minimum intelligence required to equip item

  interval=[mintime maxtime]
  Used by Spawner Objects to determine interval (in minutes) between the spawning of objects

  layer=[layer]
  Defines which layer (See Layer List NPC should equip item on - if it's equippable

  light=[0/1]
  If set to 1, marks item with elemental type Light, which defines the type of damage dealt if it's a weapon

  lightning=[0/1] or [lowskill highskill]
  If set to 1, marks item with elemental type Lightning, which defines the type of damage dealt if it's a weapon

  lodamage=[lodamage]
  Minimum damage value of a weapon (randomized between this and hidamage)

  loot=[lootListID]
  Adds random loot to a container based on specified lootListID in UOX3/dfndata/items/lootlists.dfn

  maxhp=[hitpoints]
  Set maximum hitpoints of item - generally used as durability for armor or items with a limited number of uses.

  more=[hex value]
  Generic variable whose purpose changes depending on context. For instance:

  - Spellbooks can be locked by setting their more variable to 1. Locked spellbooks cannot have spells added to them
  - Order/Chaos Gate openers store the serial of the associated castle gates in the more variable
  - The more variable is used by books to specify which pre-defined book text to load from UOX3/dfndata/misc/books.dfn. Such books cannot be altered in-game.
  - Guildstones use a more value to store the ID/guild number of the guild it belongs to
  - House keys store the serial of the house they belong to in their more variable

  morexyz=[morex],[morey],[morez]
  Generic, comma separated variables whose purpose changes depending on context. For instance:

  - Light sources store their "on" direction value in the morex portion of this variable when the light source is turned off, and applies it to the direction variable again when turned back on
  - For compatibility with older worldfiles, Spawner Objects alternatively use the value of morex to determine object to spawn if the spawnsection variable is not set.
  - morez is used to store "flag colors" of characters on the corpses created when they die, to indicate to other players whether the corpse is safe to loot or not (belonged to a red player, a criminal player, etc)
  - Containers used as bank boxes are only valid as bank boxes if their morex value is set to 1
  - Morex, morey, morez (and more) are used to store destination x, y and z (and world) coordinates on recall runes using the Mark spell, later to be used by the Recall/Gate spells
  - Morex, morey and morez are used by magic wands and items with magical spell charges to store spell circle, spell number and spell charges, respectively
  - Containers with a morez value set to 1 are trapped containers that will damage players who open them
  - Order/Chaos Gate openers use morez to indicate whether the linked castle gates (serial stored on more variable) are closed (1) or open (1)
  - Books use the morey value to set the number of pages of the book, and this has to be set before the book is opened and written. They also use a morex value of 666 to indicate that they're writable, or a value of 999 to indicate that they're read-only (most often set AFTER the book has been written)
  - Object Teleporters (type 60) use morex, morey and morez to store teleport destination coordinates (x, y and z) on the item
  - Items of morphobject type use morex to store bodyID of creature to morph into when the item is used
  - Items of type fireworks wands use morex to store the number of charges on the item
  - House signs use morez to define which gump from UOX3/dfndata/misc/misc.dfn to open when item is used
  - Moongates store the serial of the linked moongate on the other end in the morex variable
  - Field spells such as firefield, poisonfield store the caster's magery skill in the morex variable to use for damage calculations, and the caster's serial in the morey variable
  - Advancement Gates (types 80/81) use morex to store a reference to the advancementSectionID from UOX3/dfndata/advance/advance.dfn
  - Damage Objects (type 85) use morex to store base damage value applied to characters, and adds a randomized amount on top based on values in morey and morez
  - Sound Objects (type 88) use morex to store the sound effect ID to play, and morez to store the percentage chance of a sound effect playing for nearby players
  - WorldChange Gates (type 90) use morex to store the destination world number

  movable=[movable]
  Set movable status of item (0 = Default according to tiledata, 1 = Movable, 2 = GM only, 3 = Locked down, 4 = Owner only)

  name=[text]
  Name of item. Maximum length: 128 characters

  name2=[text]
  Secondary, hidden name of item, revealed with Item Identification skill (also used to name corpses and body parts from corpses). Maximum length: 127 characters

  newbie
  If present, marks item as a blessed/newbie item that cannot be stolen, and will stay with player even after they die and get resurrected.

  offspell=[value]
  Can be set to a value between -128 and 127, but is currently not used for anything. In the olden days, this was a part of UOX3's unique armor/weapon engraving system that allowed you to engrave spells on equipment with the Inscription skill.

  packitem=[itemSectionID]
  Add specified item from item DFNs to container

  pileable=[0/1]
  If set to 1, item is pileable/stackable. Not all items can be stacked, however!

  poisondamage=[0/1]
  If set to 1, marks item with elemental type Poison, which defines the type of damage dealt if it's a weapon

  poisoned=[poisonStrength]
  Sets poison strength applied to item such as weapons and food (1 to 4, where 1 = Weak, 4 = Deadly)

  priv=[value]
  Set priv value for item - primarily set via code to make item decayable, blessed or dispellable

  race=[raceID]
  Set ID of race that a weapon will deal double damage against in combat

  rain=[0/1]
  If set to 1, marks item with elemental type Rain, which defines the type of damage dealt if it's a weapon

  rank=[rank]
  Used by crafting system to determine quality of item made

  restock=[amount]
  Shopkeepers who stock this item will restock specified amount of it

  script=[scriptID]
  Set scriptID of JS to attach to item on creation

  sk_made=[skillID]
  Defines the skill that is used to create the item

  snow=[0/1]
  If set to 1, marks item with elemental type Snow, which defines the type of damage dealt if it's a weapon

  spawnobj=[itemSectionID] or [npcSectionID]
  Used by Spawner Objects to determine which object to spawn from item or NPC DFNs

  spawnobjlist=[itemListID] or [npcListID]
  Used by Spawner Objects to determine which item or NPC from itemlists in UOX3/dfndata/items/itemlists.dfn or NPClists in UOX3/dfndata/npc/npclists.dfn to spawn

  spd=[speed]
  Set attack speed of weapon (higher is faster)

  stradd=[statpoints]
  Set how much strength the item temporarily grants players who equip it

  strength=[statpoints]
  Set Strength requirement for equipping item

  type=[itemType]
  Set itemType of item. See Item Types section

  value=[buyValue sellValue]
  Set item's buyvalue (how much shopkeepers will pay for item from players) and sellvalue (how much shopkeepers will sell item to players for)

  visible=[visibility]
  Set visibility of item (0 = Visible, 1 = Temporary hidden but visible to owner, 2 = Invisible by magic, 3 = Permanently hidden by GM)

  weight=[weight]
  Set weight of item (100 = 1 stone)

  weightmax=[weight]
  Maximum weight-capacity of a container (100 = 1 stone)

  wipe=[0/1]
  Determines if item is affected by item-wipes or not

  Race DFN Tags

  ALLOWEQUIPLIST=[number]
  Members of the race can equip items listed in the specified EQUIPLIST section

  ARMORREST=[number]
  Sets the armor class restriction of the race (0-127). Race will be unable to equip any armor with the specified AC

  BANEQUIPLIST=[number]
  Members of the race are forbidden from equipping items listed in the specified EQUIPLIST section

  BEARDMIN=[hue]
  Minimum value for beard colour allowed for race. Entered as a pair (min, max) along with BEARDMAX. Multiple pairs can be added to support multiple ranges of colours.

  BEARDMAX=[hue]
  Maximum value for beard colour allowed for race. Entered as a pair (min, max) along with BEARDMIN. Multiple pairs can be added to support multiple ranges of colours.

  BLOODCOLOUR=[hue]
  When blood-effects are spawned from a member of this race, their blood will be this colour (hexID of hue)

  COLDAFFECT
  If present, race will be affected by cold, based on weather, damage types, etc

  COLDLEVEL=[number]
  Cold level limit (temperature from weather system) where character of race will start taking damage

  COLDDAMAGE=[number]
  Max amount of damage caused by cold, before resistances

  COLDSECS=[seconds]
  How often cold damage can occur, in seconds

  DEXCAP=[statValue]
  Cap on Dexterity stat for the race

  GENDER=[MALE/FEMALE]
  Restrict membership in race to characters of specified gender. Leave out for no restriction.

  HAIRMIN=[hue]
  Minimum value for hair colour allowed for race. Entered as a pair (min, max) along with HAIRMAX. Multiple pairs can be added to support multiple ranges of colours.

  HAIRMAX=[hue]
  Maximum value for hair colour allowed for race. Entered as a pair (min, max) along with HAIRMIN. Multiple pairs can be added to support multiple ranges of colours.

  HEATAFFECT
  If present, race will be affected by heat, based on weather, damage types, etc

  HEATDAMAGE=[number]
  Max amount of damage caused by heat, before resistances

  HEATLEVEL=[number]
  Heat level limit (temperature from weather system) where character of race will start taking damage

  HEATSECS=[seconds]
  How often heat damage can occur, in seconds

  HPMOD=[number]
  Adjusts maximum hitpoints of member of the race by a percentage value of the character's strength. Example: 100 base hitpoints, 50 strength and HPMOD=50 will give a character max hitpoints of 100 + ( 50 * 0.50 ) = 125

  HUNGER=[number,number]
  The first number is the time in seconds between hunger checks, the second one is the damage taken when starving

  INTCAP=[statValue]
  Cap on Intelligence stat for the race

  LIGHTAFFECT
  If present, race will be affected by light, based on weather, damage types, etc

  LIGHTDAMAGE=[number]
  Base amount of damage caused by light, before resistances

  LIGHTLEVEL=[number]
  Light level that defines when character of race will take damage from light in world and dungeons. For world, character will take damage if race's LIGHTLEVEL is higher than current light value. If LIGHTLEVEL is set to 10, character will take damage from world light level if it's between 1 and 9 and character is not in a dungeon, but no damage if world light level is 10 or above. If character is in a dungeon, they will take damage if dungeon light level is 10 or higher.

  LIGHTSECS=[seconds]
  How often light damage is applied in seconds

  LIGHTNINGAFFECT
  If present, race will be affected by lightning, based on weather, damage types, etc

  LIGHTNINGDAMAGE=[number]
  Max amount of damage caused by lightning, before resistances

  LIGHTNINGCHANCE=[number]
  Chance to get hit by lightning during a storm

  LANGUAGEMIN=[number]
  Minimum skillpoints in Spirit Speak skill required for non-members of this race to understand speech from members of the race

  MAGICRESISTANCE=[float]
  Sets a magic resistance bonus for members of this race, between 0.0 and 100.0 % (not currently active)

  MANAMOD=[number]
  Adjusts maximum mana of member of the race by a percentage value of the character's intelligence. Example: 100 base mana, 50 intelligence and MANAMOD=50 will give a character max mana of 100 + ( 50 * 0.50 ) = 125

  NAME=[text]
  Name of the race

  NOBEARD
  If present, only characters with no beards can be members of this race, and any new characters joining it will have their beards (if any) removed.

  NIGHTVIS=[number]
  Light level at which night vision kicks in for members of the race. If world light level (or light level of weather system in a region, or dungeon light level) is brighter than this (i.e. lower value) nothing happens. If light level is darker (higher value) than this, the character's personal light level gets adjusted to raceLightLevel - worldLightLevel.

  PLAYERRACE=[0/1]
  Supposed to indicate whether a particular race is intended for players or not, but currently does nothing. Still, exposed to the JS engine if someone wants to make use of it!

  POISONRESISTANCE=[number]
  Sets a poison resistance bonus for members of this race, between 0.0 and 100.0 % (not currently active)

  PARENTRACE=[raceID]
  ID of parent race, from which the race will inherit properties. Inherited properties can be overridden by re-defining them in child race.

  REQUIREBEARD
  If present, members of the race are required to have facial hear of some sort. Anyone joining the race (for instance through a Race Gate) without having facial hair will be given facial hair.

  RAINAFFECT
  If present, race will be affected by rain, based on weather, damage types, etc

  RAINDAMAGE=[number]
  Max amount of damage caused by rain, before resistances

  RAINSECS=[seconds]
  How often rain damage is applied in seconds

  RACERELATION=[raceID value]
  Defines a race's relation with another race. raceID is the ID of the other race, while value is a number between -100 and 100, where a value of 0 means the relationship is neutral, a value under 0 is enemy, and a value above 0 is ally.

  RACIALENEMY=[raceID]
  Alternate way of setting race relation. Will set a race's relation with raceID equal to the smallest relation level that still counts as enemy, i.e. -1

  RACIALAID=[raceID]
  Alternate way of setting race relation. Will set a race's relation with raceID equal to the smallest relation level that still counts as ally, i.e. 1

  [SKILLNAME]G=[combatModID]
  Bonus applied to skill checks for specified SKILLNAME, based on percentage value provided in [COMBAT MODS] section for specified ID. For instance, SWORDSMANSHIPG=3 will apply a 20% bonus to swordsmanship skill checks for members of a race with that tag, if using the default [COMBAT MODS] section. The same bonus is also applied to base damage in combat, before other damage modifiers.

  [SKILLNAME]L=[number]
  Penalty applied to skill checks for specified SKILLNAME, based on percentage value provided in [COMBAT MODS] section for specified ID. For instance, SWORDSMANSHIPL=3 will apply a 20% penalty to swordsmanship skill checks for members of a race with that tag, if using the default [COMBAT MODS] section. The same penalty is also applied to base damage in combat, before other damage modifiers.

  SKINMIN=[hue]
  Minimum value for skin colour allowed for race. Entered as a pair (min, max) along with SKINMAX. Multiple pairs can be added to support multiple ranges of colours.

  SKINMAX=[hue]
  Maximum value for skin colour allowed for race. Entered as a pair (min, max) along with SKINMIN. Multiple pairs can be added to support multiple ranges of colours.

  SNOWAFFECT
  If present, race will be affected by snow, based on weather, damage types, etc

  SNOWDAMAGE=[number]
  Max amount of damage caused by snow, before resistances

  SNOWSECS=[seconds]
  How often snow damage can occur, in seconds

  STAMMOD=[number]
  Adjusts maximum stamina of member of the race by a percentage value of the character's dexterity. Example: 100 base stamina, 50 dexterity and STAMMOD=50 will give a character max stamina of 100 + ( 50 * 0.50 ) = 125

  STORMAFFECT
  If present, race will be affected by storms, based on weather, damage types, etc

  STORMDAMAGE=[number]
  Max amount of damage caused by storms, before resistances

  STORMSECS=[seconds]
  How often storms damage can occur, in seconds

  STRCAP=[statValue]
  Cap on Strength stat for the race

  THIRST=[number,number]
  The first number is the time in seconds between thirst checks, the second one is the damage taken when extremely thirsty

  VISRANGE=[number]
  Default visibility range of race. Defaults to 18

  Region DFN Tags

  abweath=[weatherSystemID]
  Assign a weather system from UOX3/dfndata/weather/weather.dfn to this region

  appearance=[value]
  Set the appreanace of this region (0 = Spring, 1 = Summer, 2 = Autumn, 3 = Winter, 4 = Desolation)

  buyable=[number]
  See Advanced Trade System for details

  chanceforbigore=[percentage]
  Chance from 0 to 100 of finding 5 ores instead of 1 while mining in this region

  dungeon=[0/1]
  If set to 1, marks this region as a dungeon, which is used to determine light level for players who enter

  escorts=[0/1]
  If set to 1, marks this region as a potential target region for NPC Escort Quests

  gate=[0/1]
  If set to 1, allows players to Gate in and out of this region

  good=[goodID]
  See Advanced Trade System for details

  guarded=[0/1]
  If set to 1, this region is protected by guards

  guardlist=[npcListID]
  If region is guarded, this sets the NPC list (from UOX3/dfndata/npc/npclists.dfn) to choose from when spawning guards

  guardowner=[text]
  Set name of guard owner, which is used in a system message to players who enter/leave the region, in the shape of "You are now under the protection of [text] guards"

  instanceid=[instanceID]
  Set which instance of a world this region should exist in

  magicdamage=[0/1]
  If set to 1, hostile spells are castable in this region

  mark=[0/1]
  If set to 1, the Mark spell is usable to mark recall runes in this region

  musiclist=[musicListID]
  Specifies default music to play in this region, based on sections of music lists (MUSICLIST #) setup in regions.dfn based on entries from config.txt in UO client's music folder

  name=[text]
  Set name of this region

  orepref=[oreType,oreChanceWeight]
  Set one of these lines for each ore type you want players to be able to find in this region, with an optional weighted value behind representing the chance to find said ore in the region. If no chance is specified, will use default chance defined via DEFAULTCHANCE tag for said ore type in skills.dfn

  race=[raceID]
  Set the ID of the race this region belongs to. Members of a race can freely perform hostile actions against enemies of said race within this region

  randomvalue=[lowvalue highvalue]
  See Advanced Trade System for details

  recall=[0/1]
  If set to 1, players are able to recall in and out of this region

  safezone=[0/1]
  If set to 1, any and all hostile actions are disallowed within this region

  script=[scriptID]
  Specifies JS script to assign to this region

  sellable=[lowvalue highvalue]
  See Advanced Trade System for details

  spawn=[predefinedSpawnID]
  Set ID of a predefined spawn section setup in UOX3/dfndata/spawn/. See Spawn Regions for details

  teleport=[0/1]
  If set to 1 (default if not specified), Teleport spell is enabled within this region

  world=[worldNumber]
  Specifies which world number the region belongs in

  x1=[x coordinate]
  Defines boundary of region. Multiple X1 Y1 -> X2 Y2 blocks can be set for a single region.

  x2=[x coordinate]
  Defines boundary of region. Multiple X1 Y1 -> X2 Y2 blocks can be set for a single region.

  y1=[y coordinate]
  Defines boundary of region. Multiple X1 Y1 -> X2 Y2 blocks can be set for a single region.

  y2=[y coordinate]
  Defines boundary of region. Multiple X1 Y1 -> X2 Y2 blocks can be set for a single region.

  Spawn Region DFN Tags

  call=[amount]
  Max amount of objects to spawn in one batch during respawns

  instanceid=[instanceID]
  Set ID of instance of a world this spawnregion should be spawning objects in

  item=[itemSectionID]
  Set sectionID of item to spawn from Item DFNs

  itemlist=[itemListID]
  Set which itemlist from UOX3/dfndata/items/itemlists.dfn to randomly spawn an item from. Can be used instead of item tag

  maxitems=[amount]
  Total amount of items spawn region is allowed to spawn

  maxnpcs=[amount]
  Total amount of NPCs spawn region is allowed to spawn

  maxtime=[maxTime]
  Max time between respawns for this spawn region

  mintime=[minTime]
  Min time between respawns for this spawn region

  name=[text]
  Set name of the spawn region

  npc=[npcSectionID]
  Set sectionID of NPC to spawn from NPC DFNs

  npclist=[npcListID]
  Set which npclist from UOX3/dfndata/npc/npclists.dfn to randomly spawn an NPC from. Can be used instead of npc tag

  onlyoutside=[0/1]
  If set to 1, UOX3 will attempt to only spawn objects from this spawn region outside buildings

  prefz=[value]
  Set the maximum Z influence a dynamic or static item can have on spawning

  validlandpos=[x],[y],[z]
  Can be used to pre-define valid spawn locations on land for this spawn region. Useful in case it's an area with few valid spawn locations, to ensure the server can always find one

  validwaterpos=[x],[y],[z]
  Can be used to pre-define valid spawn locations on water for this spawn region. Useful in case it's an area with few valid spawn locations, to ensure the server can always find one

  world=[worldNumber]
  Set the world that this spawn region should be spawning objects in

  x1=[x coordinate]
  Upper left corner of coordinate set

  x2=[x coordinate]
  Lower right corner of coordinate set

  y1=[y coordinate]
  Upper left corner of coordinate set

  y2=[y coordinate]
  Lower right corner of coordinate set

  Weather System DFN Tags

  coldchance=[percentage]
  Chance for a cold day. If it passes, temperature will be fixed at a value between mintemp and coldintensity

  coldintensity=[temperature]
  ???

  heatchance=[percentage]
  Chance for a hot day. If it passes, temperature will be fixed at a value between maxtemp and heatintensity

  heatintensity=[temperature]
  ???

  lightmin=[lightLevel]
  Set minimum light level (0-20)

  lightmax=[lightLevel]
  Set maximum light level (0-20)

  maxtemp=[temperature]
  Set maximum temperature of the day. Can be affected by heat waves

  mintemp=[temperature]
  Set minimum temperature of the day. Can be affected by cold snaps.

  maxwind=[text]
  Set name of the spawn region

  minwind=[npcSectionID]
  Set sectionID of NPC to spawn from NPC DFNs

  rainchance=[npcListID]
  Set which npclist from UOX3/dfndata/npc/npclists.dfn to randomly spawn an NPC from. Can be used instead of npc tag

  rainintensity=[0/1]
  If set to 1, UOX3 will attempt to only spawn objects from this spawn region outside buildings

  raintempdrop=[value]
  Set the maximum Z influence a dynamic or static item can have on spawning

  snowchance=[x],[y],[z]
  Can be used to pre-define valid spawn locations on land for this spawn region. Useful in case it's an area with few valid spawn locations, to ensure the server can always find one

  snowintensity=[x],[y],[z]
  Can be used to pre-define valid spawn locations on water for this spawn region. Useful in case it's an area with few valid spawn locations, to ensure the server can always find one

  snowthreshold=[worldNumber]
  Set the world that this spawn region should be spawning objects in

  stormchance=[x coordinate]
  Upper left corner of coordinate set

  stormintensity=[x coordinate]
  Lower right corner of coordinate set

  stormtempdrop=[y coordinate]
  Upper left corner of coordinate set

- DFN Priority System

  Say you, as a shard admin, want to customize some of the DFNs that come with UOX3, but you worry about those changes being overwritten when time comes to update the default UOX3 package with a newer version, or about going through conflict/merge hell trying to weave all your custom changes into a newer version of the scripts.

  Enter, the DFN Priority System, the purpose of which is to allow DFNs to be loaded in a specific order, allowing shard admins to potentially override the default script packages by ensuring their custom DFNs get loaded last, aka get priority treatment.

  ### How to Use the DFN Priority System

  In the root folder of the type of DFNs you wish to override, create a new file using your favourite text-editor, and name it "priority.nfo". For instance, if you wish to override parts of carve.dfn with the contents of a custom file named customcarve.dfn, place the priority.nfo file in the DFNDATA\CARVE\ folder, right alongside the carve.dfn and customcarve.dfn files.

  The contents of customcarve.dfn would in this case be a copy & paste of one of the entries from carve.dfn, but with some minor changes applied - carving an alligator gives 24 meat instead of 12:

  // alligator [CARVE 1]
  {
  ADDITEM=0x09f1
  ADDITEM=0xc002,24
  }

  Next, inside the priority.nfo file, copy paste the following default setup:

  [priority]
  {
  DEFAULTPRIORITY=0
  customcarve.dfn=1
  }

  The DEFAULTPRIORITY line determines the base priority level of all DFN files, which is normally left at zero. In this example, this would assign a default priority of 0 to carve.dfn, while next line would assign a priority of 1 to customcarve.dfn - ensuring that the contents of customcarve.dfn get priority over the default DFN file and is loaded last. Now, if there are any entries in these DFN files that conflict with each other, the copy in customcarve.dfn would take presedence, since it's loaded last!

  You can use this method to override any DFN file inside the DFNDATA folder.

- # Scripting - JavaScript Engine

- Introduction to JS Engine in UOX3

  UOX3's scripting engine is based on an embedded C++ implementation of JavaScript called SpiderMonkey (v1.7.0). It allows UOX3 to load, read and interpret JavaScript files containing JS events, methods, functions, objects and properties written specifically for UOX3 in order to expose the inner workings of the server to prospective shard admins and script writers.

  UOX3's JavaScripts can be reloaded dynamically without restarting the server, making it very easy to iterate on new features or modify existing ones.

  Example of a simple JavaScript in UOX3, used with the Dice and Cup object to allow players to roll a dice and have the number displayed for others to see:

      function onUseChecked( pUser, iUsed )
      {
      	// Generate two random numbers from 1-6
      	var iDice1 = RandomNumber( 1, 6 );
      	var iDice2 = RandomNumber( 1, 6 );

      	// Fetch the name of the player using the object
      	var pName = pUser.name;

      	// Display the result either as an emote above player (if object is in a container) or a message above item (if on ground)
      	if( iUsed.container != null )
      		pUser.EmoteMessage( pName+" rolls the dice and gets a "+iDice1+" and a "+iDice2+"." );
      	else
      		iUsed.TextMessage( pName+" rolls the dice and gets a "+iDice1+" and a "+iDice2+"." );
      	return false;
      }

- JSE File, Object and Type-associations

  In the UOX3/js/ folder, you can find three files that are used to map UOX3 JavaScript files to script IDs, and map item IDs or item Types to script IDs.

  jse_fileassociations.scp
  Through this file you can assign script IDs to JavaScripts for use either with objects, commands, spells, skills, network packets or the console. You'll need to assign your script a scriptID in here before you can assign it to an object or use it in either of the other two files mentioned below. Syntax: [scriptID]=[filepath and name]

  Script Sections in jse_fileassociations.scp

  [SCRIPT_LIST]
  General mapping of scripts to scriptIDs. Can be assigned to objects in-game, via DFNs, or via other scripts.

  [COMMAND_SCRIPTS]
  Mapping of scriptIDs to scripts containing command events and functions. Scripts are executed when using associated commands in-game.

  [MAGIC_SCRIPTS]
  Mapping of scriptIDs to scripts containing spell events and functions. Scripts are executed when casting associated spells in-game.

  [SKILLUSE_SCRIPTS]
  Mapping of scriptIDs to scripts containing skill events and functions. Scripts are executed when using associated skills in-game.

  [PACKET_SCRIPTS]
  Mapping of scriptIDs to scripts containing networking packet events and functions. Scripts are executed when associated network packets are received.

  Registering Packet Scripts

  To handle an incoming network packet in the JS engine, first ensure that OVERLOADPACKETS is enabled in uox.ini, and that the script has been assigned a unique scriptID in the [PACKET_SCRIPTS] section of jse_fileassociations.scp.

  Next, in the JS script handling the packet, register the packet in question with UOX3's packet handler, so it knows to direct any requests with this packet to the script in question:

      function PacketRegistration()
      {
      	// Leave the second value (subCmd) at 0x0, as it's not implemented yet
      	RegisterPacket( packetNum, 0x0 );
      }

      function onPacketReceive( pSocket, packetNum, subCommand )
      {
      	var cmd = pSocket.GetByte( 0 );
      	if( cmd != packetNum )
      		return;

      	... // Read packet data here, using ReadBytes, GetByte, GetWord, GetDWord, GetSByte, GetSWord, GetSDWord and GetString socket methods, and respond if needed, by creating a new packet object followed by WriteByte, WriteShort, WriteLong, Send and Free packet methods. See UOX3 JavaScript Docs for additional details and examples.

      	return;
      }

  Then, in the same script, use the onPacketReceive JS Event to handle the incoming packet. Note that once a script has been registered as handler of a network packet, said script is entirely responsible for reading the bytes associated with the packet and forming any/all responses that the client might expect. Not sending a response, or sending the wrong response, or reading an incorrect amount of bytes from the socket buffer can result in unpredictable behaviour by the client and/or server!

  [CONSOLE_SCRIPTS]
  Mapping of scriptIDs to scripts containing console events and functions. Scripts are executed when associated console actions/commands are used.

  Registering Console Scripts

      function ConsoleRegistration()
      {
      	RegisterKey( '[key]', "[commandTitle]" );
      }

      function commandTitle()
      {
      	...
      }

  jse_objectassociations.scp
  Items whose IDs have been mapped to scripts via this file will execute the OnUse() JS event in the associated script when the items are used (double-clicked) in-game. Syntax: [itemID]=[scriptID]

  jse_typeassociations.scp
  Instead of relying on item IDs or directly assigning scripts to items, you can also use this file to map the scripts to specific item types, which when used in-game will execute the onUse() JS event for the associated script. Syntax: [itemType]=[scriptID]

- JS Engine Documentation

  The UOX3 JS documentation documents all the UOX3-specific events, triggers, methods, functions and properties available to script writers.

  UOX3 contains an embedded scripting engine based on SpiderMonkey v1.7.0, which offers an equivalent JavaScript feature set to JavaScript 1.7 or ECMAScript 5, though certain features (especially browser-specific ones) might not be fully supported.

  For additional help with or discussion around any of these, don't hesitate to make use of the UOX3.org forums or the UOX3 Discord chat!

- JS Tutorial
  JavaScript Fundamentals
  Working with values

  #### Assigning values to variables

      var v; // Initialize the variable v, without assigning it a value

      	v = 0; // Int
      	v = 0.5; // Double
      	v = someString; // String
      	v = null; // Null value
      	v = undefined; // Undefined value
      	v = false; // Boolean

  #### Checking variable/value type

  To check whether a value has a particular type, the following methods can be used:

      var v = computeSomeValue();

      	var isString = typeof v === "string"; // Check if variable v contains a String
      	var isNumber = typeof v === "number"; // Check if variable v contains a Number
      	var isNull = v === null; // Check if variable v contains a Null value
      	var isBoolean = typeof v === "boolean"; // Check if variable v contains a Boolean
      	var isObject = typeof v === "object" && v !== null; // Check if variable v contains an Object

  Working with functions

  #### Defining a function

  When defining a function within a script, other portions of said script can call on the function to perform some specific work. To define a function:

      function myJsFunction( myParam )
      	{
      		Console.Print( myParam.toString() + "\n" ); // Prints the value of provided parameter, as a string
      	return true; // returns the Boolean value true from the function
      	}

  #### Calling a function

  To call a function from elsewhere inside a script, and have the code inside said function run, just type the name of the function, along with any parameters required:

      var myTestBool = myJsFunction( 42 );

  Creating an array

  Arrays can be created using either of the below methods:

      var x = [];
      	x = Array();
      	x = new Array;

  Creating an object

  Custom JS Objects can be created using either of the below methods:

      var x = {};
      	x = Object();
      	x = new Object;

  Exception handling

  #### throw

      throw new Error("This will result in a custom error displayed in the UOX3 console!");

  #### catch

  #### finally

  Object properties
  For and While loops

  #### Advanced Topics

  Generator functions and yield

  JS Events, Functions and Objects for UOX3
  Events/Triggers

  #### Other Resources

  - [mozilla.org] A re-introduction to JavaScript (JS tutorial)
- JSE Resources

  #### The JScript Vault

  Check out The JScript Vault on the UOX3.org forums, which contains many scripts written by other UOX3 users that can be downloaded and added to any UOX3 shard, or used as references for writing new scripts.

  Some examples of such scripts:

  - Remote NPC Attack
  - WorldBuilder - JS Edition
  - Kill Task (Bounty Hunter) Script
  - Wandering Healer

- # Resources and Links

- UOX3 Community Links

  #### UOX3 @ GitHub

  GitHub is the current home for UOX3's sourcecode, and where to go to check up on the latest, cutting-edge developments for UOX3.

  #### UOX3 @ Discord

  For live chat, support and discussions with other UOX3 users and/or developers, head on over to the UOX3 Discord!

  #### UOX3.org

  Main community site for UOX3 can be found at UOX3.org. There you'll find downloads, support forums, useful tools and guides beyond what is covered by these docs.

  #### Xuri's UOX3 Guide

  Xuri's UOX3 Guide, while originally written for a different era of UOX3, still offers a myriad of tips, tricks and advice for shard admins and GMs, as well as lists of various data such as IDs, light-settings, etc. Recommended read for both novices and veterans.

  #### Legacy SourceForge Repositories

  Legacy, ready-only CVS repositories for older versions of UOX3 can be found at OpenUO @ SourceForge and UOX3 @ SourceForge.

- Third Party Tools

  #### Xuri's WorldBuilder

  Xuri's WorldBuilder is a GM Tool for UOX3 that allows GMs to easily create custom houses, add decorations and even plant entire forests. Mainly focusing on worldbuilding, it also functions as a traditional GM Tool, giving the user easy access to all the most used commands in UOX3.

  #### UO:R Community Edition of Razor

  Razor is both a necessary tool to remove encryption from the UO client, allowing you to actually connect to UOX3, as well as a tool that can provide many quality-of-life improvements over the regular old UO client.

  #### ClassicUO

  ClassicUO is a cross-platform (Windows, Linux, macOS), open source implementation of the Ultima Online Classic Client that runs faster, smoother and with more features and customizability than the original UO client.

  #### OrionUO

  OrionUO is an alterntive open source UO client that uses OpenGL for rendering. It's available for Windows and Linux, and comes with a metric ton of customization options on top of smoother performance compared to the original UO client.

  #### UOFiddler

  UOFiddler is the spiritual successor of InsideUO, though it has gone far beyond that by now. Tool that can be used to view and alter almost every file in the UO client.

  #### CentrED+

  CentrED+ is a Client/Server based map-editor, which gives the ability for several people to work on both terrain and statics together at the same time.

- Other UO Emulator Resources

  #### UOEmu Stratics Community Forums

  A home for discussion of non-Official Ultima Online Servers, also known as Freeshards - hosted by Stratics (who once upon a time also hosted the UOX3 website and IRC channels!)

  #### ConnectUO

  A combined launcher, patcher and UO freeshard portal that supports Linux, MacOS and Windows and the ClassicUO open source client. Being made in the spirit of the original ConnectUO/UOGateway tools. Beta starts on March 29th, and shard admins can sign up here to get a first look and help make the software stable for release.

  #### ShardPortal

  The ShardPortal is a place for anyone to advertise their shard as well as search out other active shards.

  #### UOGateway

  A top site list for free UO shards made in the spirit of and in honor of Mr. Fixit's original UOGateway tool.

  #### UO-Pixel

  Another nice (German) website focusing on providing custom artwork for UO shards. Amongst other things, it has some very nice animated item artwork (including a moving water-mill).

  #### Ryandor.com

  Ryandor.com is the homepage of Ryandor, a true artist when it comes to map-making for UO. His forums are crawling with map-makers from all corners of the world, and if you have a question about map-editing that you cannot get an answer for on these forums - there is no answer ;)

- # History and Credits

- UOX3 Changelog

  Click the changelog below to view the detailed update notes for the latest UOX3 version (and many, many versions before that). To stay up-to-date with developments outside of stable releases, check out the sticky topic in the UOX3.org forums titled Changelog for next UOX3 version. It is continuously updated with details of the latest commits to GitHub.

  UOX3 Changelog - Current
  Archived UOX3 Changelogs

  Updates from 0.95.00 to 0.97.00

  Updates from 0.70.03 to 0.70.03.24b

  Updates from 0.37 to 0.70.02

- History of UOX3

  ### UOX3 History Crash Course

  UOX was originally created by Denny Zuko aka Jaegermeister in 1997 for the pre-alpha version of Ultima Online, and was subsequently abandoned, rewritten from scratch by Marcus Rating aka Cironian and released in closed-source form as UOX2 the same year.

  UOX3 is, as the number in the name implies, the third iteration of UOX, and when released by Cironian in 1998 it become the first open-source UO server emulator. While he is no longer involved with the project, hundreds of other people have since contributed to updating and maintaining UOX3, and those efforts are still ongoing, with UOX3.org now acting as a central hub for ongoing development and support.

  In 2001, UOX3 went through a monumental shift as the code base moved from C-style code to C++. Many systems (like accounts, items and characters, map regions) went through an overhaul that reduced complexity and increased performance. Memory consumption was improved, file IO was reduced, data structures were streamlined and shrunk, and network bandwith utilisation was improved.

  UOX3's scripting system was also upgraded - from the basic, trigger-based system used in the 0.68x and 0.70.x versions, to a fully fledged scripting engine based on Mozilla's SpiderMonkey JavaScript engine. These changes were spearheaded by Matthew Randall (EviLDeD, lead developer at the time) and Daniel Stratton (Abaddon), and prompted a change in version numbers, from 0.70.x to 0.95.x.

  Due to the open-source nature of UOX3, there have been numerous spin-off projects over the years - like Wolfpack, Lonewolf or NOX-wizard - all with their own rich history. Most of these have gone dormant, but the "main UOX3 branch" has been around for nearly 22 years (as of 2020), and is here for the long run.

  ### UOX Version Timeline

  UOX2 Version Timeline
  UOX2 v0.85

  Release date: 24th of September 1997

  Released by: Cironian

  Fun Facts: Single player only!

  UOX2 v0.86

  Release date: 25th of September 1997

  Released by: Cironian

  UOX3 Version Timeline

  Bonus Fact: Work on UOX3 started on 24th of September 1997... the same day UO launched! 5 days later, on 29th of September, the first 2 player session was successfully tested.

  Alpha Versions (1997 - 1998)

  #### October 1997

  UOX3 v0.37 Alpha

  Release date: 22nd of October 1997

  Released by: Cironian

  Fun Fact: First multiplayer capable version of UOX released! It requires Windows 98 to run.

  UOX3 v0.38 Alpha

  Release date: 24th of October, 1997

  Released by: Cironian

  UOX3 v0.39 Alpha

  Release date: 25th of October, 1997

  Released by: Cironian

  Fun Facts: /KILL and /RESURRECT commands implemented!

  UOX3 v0.40 Alpha

  Release date: 31st of October, 1997

  Released by: Cironian

  Fun Facts: Special Halloween Edition! New characters automatically get one of 7 halloween masks. Support for UO Beta client dropped due to protocol changes.

  #### November 1997

  UOX3 v0.41 Alpha

  Release date: 1st of November, 1997

  Released by: Cironian

  UOX3 v0.42 Alpha

  Release date: 4th of November, 1997

  Released by: Cironian

  Fun Facts: Maximum number of players raised to 32!

  UOX3 v0.43 Alpha

  Release date: 17th of November, 1997

  Released by: Cironian

  Fun Facts: First introduction of corpses!

  UOX3 v0.44 Alpha

  Release date: 22nd of November, 1997

  Released by: Cironian

  UOX3 v0.45 Alpha

  Release date: 24th of November, 1997

  Released by: Cironian

  Fun Facts: Basic scripting support added!

  UOX3 v0.46 Alpha

  Release date: 26th of November, 1997

  Released by: Cironian

  Contributors: Drax

  UOX3 v0.47 Alpha

  Release date: 27th of November, 1997

  Released by: Cironian

  Fun Facts: Max players increased to 128! Max items raised to 4096! First NPC (Orc) added!

  UOX3 v0.48 Alpha

  Release date: 29th of November, 1997

  Released by: Cironian

  Fun Facts: First NPC reactions to player speech added!

  #### December 1997

  UOX3 v0.49 Alpha

  Release date: 1st of December, 1997

  Released by: Cironian

  UOX3 on hold, Possible deal with OSI

  On 3rd of December, 1997, work on UOX3 was temporarily put on hold to explore the possibility of UOX3 becoming an officially authorized add-on product for Ultima Online. Cironian would later resume work on it as no progress was made on such a deal.

  UOX3 v0.50 Alpha

  Release date: 24th of December, 1997

  Released by: Cironian

  Fun Facts: Garbage collection implemented! UOX3 icon added! First readable book added! First bunch of third party tools arrive on the scene in the shape of UOXSetup and MapMaker (later to evolve into WorldForge?)!

  #### January 1998

  UOX3 v0.51 Alpha

  Release date: 2nd of January, 1998

  Released by: Cironian

  UOX3 v0.52 Alpha

  Release date: 6th of January, 1998

  Released by: Cironian

  UOX3 v0.53 Alpha

  Release date: 10th of January, 1998

  Released by: Cironian

  UOX3 v0.54 Alpha

  Release date: 17th of January, 1998

  Released by: Cironian

  Fun Facts: Mounts added! Cironian hints about this being the last release of UOX3 as he wants to rewrite everything from scratch - again!

  #### February 1998

  UOX3 v0.55 Alpha

  Release date: 6th of February, 1999

  Released by: Cironian

  Fun Facts: Cironian loses source to his UOX4 rewrite in a harddrive crash, decides to scrap the idea and implement the same concepts in UOX3 instead.

  UOX3 v0.56 Alpha

  Release date: 10th of February, 1998

  Released by: Cironian

  Fun Facts: First parts of combat code goes in, but remains disabled.

  UOX3 v0.57 Alpha

  Release date: 11th of February, 1998

  Released by: Cironian

  UOX3 v0.58 Alpha

  Release date: 16th of February, 1998

  Released by: Cironian

  Fun Facts: Corpses can wear clothes. No more naked corpses!

  UOX3 v0.59 Alpha

  Release date: 18th of February, 1998

  Released by: Cironian

  UOX3 v0.60 Alpha

  Release date: 26th of February, 1998

  Released by: Cironian

  UOX3 is dead, Long live UOX4!

  On 3rd of March, 1998, Cironian announces that he's halting further development of UOX3 to work on UOX4 - again, and will now longer be providing any support for UOX3. However, by the start of the next month, another version of UOX3 is released!

  #### April 1998

  UOX3 v0.61 Alpha

  Release date: 1st of April, 1998

  Released by: Cironian

  UOX3 v0.62 Alpha

  Release date: 8th of April, 1998

  Released by: Cironian

  Fun Facts: Offline/LAN mode now supports up to 4 players! First Linux port available!

  UOX3 v0.63 Alpha

  Release date: 21st of April, 1998

  Released by: Cironian

  UOX3 v0.63a Alpha

  Release date: 22nd of April, 1998

  Released by: Cironian

  #### May - July 1998

  UOX3 v0.64 Alpha

  Release date: 3rd of May, 1998

  Released by: Cironian

  Fun Facts: First working doors! Can be locked.

  UOX3 v0.65 Alpha

  Release date: 20th of May, 1998

  Released by: Cironian

  Fun Facts: 'SET command added!

  UOX3 v0.66 Alpha

  Release date: 26th of May, 1998

  Released by: Cironian

  Fun Facts: First iteration of combat system enabled (melee only)! License update.

  UOX3 v0.67 Alpha

  Release date: 28th of June, 1998

  Released by: Cironian

  Fun Facts: First edible food appears! Item type 14. First code contributions by third parties included!

  UOX3 v0.67a Alpha

  Release date: 29th of June, 1998

  Released by: Cironian

  0.67 Versions - 1998
  UOX3 v0.67a Original

  Release date: ~1-10th of July, 1998

  Released by: Cironian

  UOX3 v0.67c

  Release date: ~1-10th of July, 1998

  Released by: Morac

  Contributors: Jerrith the Healer, Anthtracks, TMB, Cray XMP1

  Fun Facts: First version release coordinated by someone other than Cironian! Teleporters, create food and NPC movement appears!

  UOX3 v0.67d

  Release date: ~1-10th of July, 1998

  Released by: Jerrith

  Fun Facts: NPCWander system introduced, as well as stamina cost for shoving characters!

  UOX3 v0.67e

  Release date: ~1-10th of July, 1998

  Released by: Anthracks

  UOX3 v0.67f

  Release date: ~1-10th of July, 1998

  Released by: Jerrith

  Contributors: Morac

  Fun Facts: Visibility modes added!

  UOX3 v0.67g

  Release date: ~1-10th of July, 1998

  Released by: Jerrith

  Fun Facts: Functional spellbooks!

  #### July 1998

  UOX3 v0.67h

  Release date: 10th of July, 1998

  Released by: Cironian

  UOX3 v0.67i

  Release date: 10th/11th of July, 1998

  Released by: Jerrith

  Contributors: Gitchigoomi, Monte Cristo, Okaria Dragon

  UOX3 v0.67j

  Release date: 11th of July, 1998

  Released by: Cironian

  Fun Facts: TWEAK command added!

  UOX3 v0.67k *UNRELEASED*

  Release date: July, 1998

  Released by: Morac

  Fun Facts: Due to bugs and inefficient code, 0.67k went unreleased. Parts of it was fixed and merged into 0.67l.

  UOX3 v0.67l

  Release date: July, 1998

  Released by: Jerrith

  Contributors: Zarn, Crimson Guard

  UOX3 v0.67m

  Release date: July, 1998

  Released by: Morac

  UOX3 v0.67n

  Release date: July, 1998

  Released by: Jerrith

  Contributors: Drylock, Ash, Okaria Dragon

  UOX3 v0.67o

  Release date: July, 1998

  Released by: Jerrith

  Contributors: Ash, Drylock, Gitchigoomi, El_Barto

  UOX3 v0.67p

  Release date: July, 1998

  Released by: Morac

  Contributors: Ash, Rhuarc, Gitchigoomi

  Fun Facts: First town regions!

  UOX3 v0.67q

  Release date: July, 1998

  Released by: RofGilead

  Contributors: Ash

  Fun Facts: Day & Night cycle added, and Lumberjacking!

  UOX3 v0.67r

  Release date: July, 1998

  Released by: Morac

  Contributors: Rhuarc, zarn

  Fun Facts: NPCs can flee in combat!

  UOX3 v0.67r+

  Release date: July, 1998

  Released by: Morac

  Contributors: El_Barto, TMB, Ash

  Fun Facts: Characters will now become hungry!

  UOX3 v0.67s

  Release date: July, 1998

  Released by: Jerrith

  Contributors: El_Barto, Okaria Dragon

  UOX3 v0.67t

  Release date: July, 1998

  Released by: Jerrith

  Fun Facts: Light sources can have different light settings!

  UOX3 v0.67u

  Release date: July, 1998

  Released by: Morac

  UOX3 v0.67v

  Release date: July, 1998

  Released by: Jerrith

  Contributors: Ash

  UOX3 v0.67w

  Release date: July, 1998

  Released by: Jerrith

  Contributors: Ash, Morac, Maytrix

  Fun Facts: Time system now keeps track of the two moons, Felucca and Trammel! Object limit raised to 8192.

  UOX3 v0.67w+

  Release date: July, 1998

  Released by: Morac

  UOX3 v0.67x

  Release date: July, 1998

  Released by: Jerrith

  Contributors: Morac, Pug, Fearicon

  Fun Facts: 41/64 spells working! Basic NPC AIs added - healer, monster and guard!

  UOX3 v0.67x+

  Release date: 26th of July, 1998

  Released by: Jerrith

  Contributors: Pug

  UOX3 v0.67y

  Release date: July, 1998

  Released by: Tal Strake

  Fun Facts: Heartbeat added! Let's third party tools detect server if server is up or not.

  UOX3 v0.67y+

  Release date: 30. July 1998

  Released by: Morac

  Fun Facts: Fixed bugs introduced in 0.67x++ (yes, ++)!

  #### August, 1998

  UOX3 v0.67.026

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Ashran, Beosil

  Fun Facts: Banker NPCs added! And death animations.

  UOX3 v0.67.027

  Release date: August, 1998

  Released by: Tal Strake

  UOX3 v0.67.028

  Release date: August, 1998

  Released by: Jerrith

  Fun Facts: Introduction of magic potions and alchemy skill! Basic combat highlighting of innocents (blue) and monsters (red).

  UOX3 v0.67.029

  Release date: August, 1998

  Released by: Krozy

  Fun Facts: NPCLISTs, RANDOMNAMEs and LOOTLISTs make their appearance!

  UOX3 v0.67.030

  Release date: August, 1998

  Released by: Jerrith

  Fun Facts: BACKPACK and PACKITEM tags added for NPCs!

  UOX3 v0.67.031

  Release date: August, 1998

  Released by: Anthracks

  UOX3 v0.67.032

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Zarn, Krozy

  Fun Facts: First NPC shopkeepers!

  UOX3 v0.67.033

  Release date: August, 1998

  Released by: Ashran

  UOX3 v0.67.034

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Drylock, Krozy, Morac, Maytrix

  UOX3 v0.67.035

  Release date: August, 1998

  Released by: Jerrith

  UOX3 v0.67.036

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Krozy, Morac

  UOX3 v0.67.37

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Morac, Krozy, El_Barto

  Fun Facts: Monster sounds!

  UOX3 v0.67.38

  Release date: August, 1998

  Released by: Jerrith

  UOX3 v0.67.39

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Morac

  Fun Facts: Command to play music added!

  UOX3 v0.67.40

  Release date: August, 1998

  Released by: Anthracks

  Contributors: Jerrith

  Fun Facts: Players can be jailed! Secure trading added!

  UOX3 v0.67.41

  Release date: August, 1998

  Released by: Maytrix

  Fun Facts: Wipe command added!

  UOX3 v0.67.42

  Release date: August, 1998

  Released by: Jerrith

  Fun Facts: In-game region system added!

  UOX3 v0.67.43

  Release date: August, 1998

  Released by: Jerrith

  Contributors: Krozy, Anthracks

  Fun Facts: Scriptable skill and stat advancement added!

  UOX3 v0.67.44

  Release date: August, 1998

  Released by: Morac

  Fun Facts: NPCs can open doors! And collide with stuff.

  UOX3 v0.67.45

  Release date: August, 1998

  Released by: Anthracks

  Contributors: SirGonad, Jerrith

  Fun Facts: Healing/Veterinary implemented!

  UOX3 v0.67.45a

  Release date: August, 1998

  Released by: Morac

  Contributors: Milan Rabaa

  UOX3 v0.67.45b

  Release date: August, 1998

  Released by: Sir Joseph

  Contributors: Anthracks

  0.68 Versions - 1998

  #### August, 1998

  UOX3 v0.68

  Release date: ~17 August, 1998

  Released by: Cironian

  Contributors: Beosil

  Fun Facts: Item limit increased from 4096 to 16384!

  UOX3 v0.68.001

  Release date: ~17th-24th August, 1998

  Released by: Morac

  UOX3 v0.68.002

  Release date: ~17th-24th August, 1998

  Released by: Sir Joseph

  Contributors: Krozy

  UOX3 v0.68.003

  Release date: ~17th-24th August, 1998

  Released by: Sir Joseph

  Contributors: Morac

  Fun Facts: Combat with viking swords now has sound!

  UOX3 v0.68.004

  Release date: ~17th-24th August, 1998

  Released by: Anthracks

  Contributors: Morac, Jerrith, Halin Talismoon

  UOX3 v0.68.005

  Release date: ~17th-24th August, 1998

  Released by: Maytrix

  UOX3 v0.68.006

  Release date: ~17th-24th August, 1998

  Released by: Tal Strake

  UOX3 v0.68.007

  Release date: ~17th-24th August, 1998

  Released by: Maytrix

  UOX3 v0.68.008

  Release date: ~17th-24th August, 1998

  Released by: Maytrix

  Contributors: Morac

  UOX3 v0.68.009

  Release date: ~17th-24th August, 1998

  Released by: Maytrix

  Fun Facts: Container spawners and ITEMLISTS implemented!

  UOX3 v0.68.010

  Release date: 24 August, 1998

  Released by: Cironian

  Fun Facts: No range checks for GMs!

  UOX3 v0.68.011

  Release date: ???, 1998

  Released by: Polaris

  Contributors: Tal Strake

  UOX3 v0.68.012

  Release date: ???, 1998

  Released by: Kathrrak & Tal Strake

  UOX3 v0.68.013

  Release date: ???, 1998

  Released by: SirGonads

  Fun Facts: Reloading of server settings while server is running! Tracking, Begging and Animal Lore skills added!

  UOX3 v0.68.014

  Release date: ???, 1998

  Released by: Tal Strake & Kathrrack

  UOX3 v0.68.015

  Release date: ???, 1998

  Released by: TANiS

  UOX3 v0.68.016

  Release date: ???, 1998

  Released by: TANiS

  UOX3 v0.68.017

  Release date: ???, 1998

  Released by: Krazy, Jim, Polaris

  Fun Facts: Townstones introduced!

  UOX3 v0.68.018

  Release date: ???, 1998

  Released by: Morac

  Contributors: Brad, Kathrrak, Jack, Friend

  UOX3 v0.68.019

  Release date: ???, 1998

  Released by: Morac

  Contributors: Drylock

  UOX3 v0.68.019a

  Release date: ???, 1998

  Released by: Sir Joseph

  Contributors: Krozy, Morac

  UOX3 v0.68.020 (Failed release)

  Release date: ???, 1998

  Released by: Morac

  UOX3 v0.68.021

  Release date: ???, 1998

  Released by: Morac

  Contributors: Drylock, Beosil

  Fun Facts: Divide by zero in combat fixed!

  UOX3 v0.68.022

  Release date: ???, 1998

  Released by: Sir Joseph

  Contributors: Tal Strake

  Fun Facts: First combat with bows and arrows implemented!

  UOX3 v0.68.023

  Release date: ???, 1998

  Released by: Polaris, Tal Strake

  Contributors: Morac, Friend

  Fun Facts: House deeds!

  UOX3 v0.68.024

  Release date: ???, 1998

  Released by: Tal Strake

  UOX3 v0.68.025.001

  Release date: ???, 1998

  Released by: The UOX Development Team

  Fun Facts: More stable codebase!

  UOX3 v0.68.025.002

  Release date: ???, 1998

  Released by: Cironian & Ridcully

  UOX3 v0.68.025.003

  Release date: ???, 1998

  Released by: CVS system version

  Contributors: Drylock, Anthracks, Ridcully, Maytrix

  Fun Facts: First use of CVS!

  UOX3 v0.68.025.004 (Unreleased)

  Release date: ???, 1998

  Released by: Maytrix

  UOX3 v0.68.025.005

  Release date: ???, 1998

  Released by: Vagrant

  Contributors: Maytrix

  Fun Facts: Lockpicking added!

  UOX3 v0.68.025.006

  Release date: ???, 1998

  Released by: McCleod

  Fun Facts: Newbie Items!

  UOX3 v0.68.025.007

  Release date: ???, 1998

  Released by: Hunter

  UOX3 v0.68.025.008

  Release date: ???, 1998

  Released by: Friend (Brother Kane)

  Fun Facts: Tailoring!

  UOX3 v0.68.025.008b

  Release date: ???, 1998

  Released by: Friend (Brother Kane)

  UOX3 v0.68.025.009

  Release date: ???, 1998

  Released by: McCleod

  UOX3 v0.68.025.010

  Release date: ???, 1998

  Released by: Tao

  Contributors: DasRaetsel

  Fun Facts: Sphere of influence introduced to help server performance!

  UOX3 v0.68.025.011

  Release date: ???, 1998

  Released by: Bud

  UOX3 v0.68.025.012

  Release date: ???, 1998

  Released by: Tao

  UOX3 v0.68.025.012a

  Release date: ???, 1998

  Released by: SpaceDog

  UOX3 v0.68.025.013

  Release date: ???, 1998

  Released by: Bud

  Contributors: Tao, SpaceDog

  Fun Facts:

  UOX3 v0.68.025.014

  Release date: ???, 1998

  Released by: TANiS

  Fun Facts: Teleporting guards added!

  UOX3 v0.68.025.014a

  Release date: ???, 1998

  Released by: TANiS

  UOX3 v0.68.025.015

  Release date: ???, 1998

  Released by: TANiS

  Contributors: Bud

  Fun Facts: Performance profiling added to console!

  #### September, 1998

  UOX3 v0.68.025.016

  Release date: ~September, 1998

  Released by: Friend (Brother Kane)

  Fun Facts: Cannons!

  UOX3 v0.68.025.016a

  Release date: ~September, 1998

  Released by: TANiS

  UOX3 v0.68.025.017

  Release date: ~September, 1998

  Released by: Vagrant

  UOX3 v0.68.025.018

  Release date: 26 September, 1998

  Released by: Sir Joseph

  Contributors: SpaceDog, Vagrant, Anthracks, Friend

  Fun Facts: Advancement Objects! Poison attacks!

  #### October, 1998

  UOX3 v0.68.025.019

  Release date: 3 October, 1998

  Released by: Sir Joseph

  Contributors: Bud, SpaceDog, Vagrant, Anthracks

  Fun Facts: Mining regions within other regions!

  UOX3 v0.68.025.020

  Release date: 3 October, 1998

  Released by: Tauriel

  UOX3 v0.68.025.020a

  Release date: 4 October, 1998

  Released by: Tauriel

  Contributors: Dupois, TANiS, CyberCrusher

  UOX3 v0.68.025.021

  Release date: ~4-11 October, 1998

  Released by: Cironian

  UOX3 v0.68.025.022

  Release date: ~4-11 October, 1998

  Released by: TANiS

  Fun Facts: Monsters can attack animals!

  UOX3 v0.68.025.023

  Release date: ~4-11 October, 1998

  Released by: Moongraven

  UOX3 v0.68.025.024

  Release date: 11 October, 1998

  Released by: Sir Joseph

  Contributors: Gerry, Dupois, Vagrant, Anthracks, Jim Wright

  Fun Facts: Scriptable global teleport locations

  UOX3 v0.68.025.025

  Release date: 11 October, 1998

  Released by: Cironian

  Fun Facts: INVUL and NOINVUL commands!

  UOX3 v0.68.025.026

  Release date: 11 October, 1998

  Released by: Gerry & Sir Joseph

  Contributors: Gerry, SpaceDog, Anthracks, Bud, Ash, Dupois, Sir Joseph and Lord Slayer

  Fun Facts: Training Dummies added!

  UOX3 v0.68.025.027

  Release date: 26 October, 1998

  Released by: Gerry

  Contributors: Sir Joseph, Friend, SpaceDog, Bud, Vagrant, Moongraven, Max Wulf, Dupois, Lord Slayer, Tauriel, Anthracks, Zadius

  Fun Facts: Weight system appears!

  #### November, 1998

  UOX3 v0.68.025.027a

  Release date: 5 November, 1998

  Released by: Genesis

  Fun Facts: Gravedigging!

  UOX3 v0.68.025.027b

  Release date: 6 November, 1998

  Released by: Genesis

  UOX3 v0.68.025.028

  Release date: 7 November, 1998

  Released by: Gerry

  Contributors: Gerry, Tauriel, SpaceDog, Myca, Bud, Armageddon, Cironian, Dupois

  Fun Facts: Monster gates! Worldsave backups!

  UOX3 v0.68.025.028b

  Release date: 8 November, 1998

  Released by: Genesis

  UOX3 v0.68.025.028c

  Release date: 8 November, 1998

  Released by: Tauriel

  Contributors: Anthracks

  UOX3 v0.68.026.00

  Release date: 9 November, 1998

  Released by: Cironian

  UOX3 v0.68.026.01

  Release date: 10 November, 1998

  Released by: Cironian

  Contributors: Bud

  Fun Facts: Tents! Accounts stored separately outside UOX3.INI!

  UOX3 v0.68.026.02

  Release date: 10 November, 1998

  Released by: Bud

  Contributors: McCleod, Tauriel, SpaceDog

  UOX3 v0.68.026.03

  Release date: 13 November, 1998

  Released by: Genesis

  Contributors: Bud

  UOX3 v0.68.026.03a

  Release date: 13 November, 1998

  Released by: Nattsorgh

  Contributors: Bud, Okaria Dragon

  UOX3 v0.68.026.03b

  Release date: 13 November, 1998

  Released by: redbaron

  Contributors: Bud

  UOX3 v0.68.026.03c

  Release date: 13 November, 1998

  Released by: Genesis

  Contributors: Thunderstorm, Myth

  UOX3 v0.68.026.03d

  Release date: 14 November, 1998

  Released by: Genesis

  UOX3 v0.68.026.03e

  Release date: 16 November, 1998

  Released by: Nattsorgh

  Contributors: Genesis, Thunderstorm

  UOX3 v0.68.026.05

  Release date: 17 November, 1998

  Released by: Genesis

  Contributors: SpaceDog, Thunderstorm, Genesis/Myth, Ripper, Zadius, McCleod, Thunderstorm

  UOX3 v0.68.026.06

  Release date: 30 November, 1998

  Released by: Tauriel

  Contributors: Myth, Moongraven, Thunderstorm, Anthracks, Zadius

  Fun Facts: Trigger system added!

  UOX3 v0.68.026.06a

  Release date: 30 November, 1998

  Released by: Tauriel

  Contributors: Zadius

  UOX3 v0.68.026.06b

  Release date: 30 November, 1998

  Released by: Tauriel

  UOX3 v0.68.026.06c

  Release date: 30 November, 1998

  Released by: Tauriel

  Contributors: Beosil

  UOX3 v0.68.026.07

  Release date: ~November-December, 1998

  Released by: ???

  Contributors: Zadius, Zippy, Drax, Tauriel, Ray, Moongraven

  Fun Facts: WF compatible item type! Ray's triggers!

  0.69 Versions (1998 - 1999)
  UOX3 v0.69.00

  Release date: ~November-December, 1998

  Released by: Tauriel and the UOX Dev Team

  Contributors: Ripper, EviLDeD,

  Fun Facts: Color coded messages! Binary saves!

  UOX3 v0.69.01

  Release date: ~November-December, 1998

  Released by: Tauriel and the UOX Dev Team

  Contributors: Ripper, Pellinore Dragon

  Fun Facts: Speed improvements! Tile command!

  UOX3 v0.69.02

  Release date: ~November-December, 1998

  Released by: Tauriel and the UOX Dev Team

  Contributors: Homey, Crwth, McCleod, Phantom, Wolfgang, Zippy

  Fun Facts: Line of Sight added!

  UOX3 v0.69.03

  Release date: 16 April, 1999

  Released by: Tauriel

  Contributors: Dupois, Revana, EviLDeD

  UOX3 v0.69.03 - v0.69.04.04t

  Release date: 29 October, 1999

  Released by: ????

  Contributors: fur, Abaddon, Krazyglue, JustMichael, Kashyyyk, Zippy, Tseramed, Ripper, Revana

  Fun Facts: Weather System! Player Races! Running NPCs

  UOX3 v0.69.04.05t

  Release date: 9 November, 1999

  Released by: Freelancers?

  Contributors: fur, Abaddon

  0.70 Versions (1999 - 2001)

  #### November, 1999

  UOX3 v0.70.01.01

  Release date: 15 November, 1999

  Released by: Freelancers?

  Contributors: LB

  #### January, 2000

  UOX3 v0.70.01.02 to v0.70.01.06t

  Release date: 10 December, 1999

  Released by: UOX Dev Team/Freelancers

  Contributors: Abaddon, fur, Zippy, Eagle, Krazyglue, Homey, Quippl, Eagle, Mithos, LB, JustMichael, Tseramed, Kashyyyk, Daemar, Mike,

  Fun Facts: Murder counts! Item lockdowns! Fireworks wands! Scriptable command privileges!

  UOX3 v0.70.01.07t

  Release date: ~16 January, 2000

  Released by: UOX Dev Team/Freelancers

  Contributors: Abaddon, fur, Zippy, Eagle, Krazyglue, Homey, Quippl, Eagle, Mithos, LB, JustMichael, Tseramed, Kashyyyk, Daemar, Mike,

  Fun Facts: Murder counts! Item lockdowns! Fireworks wands! Scriptable command privileges!

  UOX3 v0.70.02

  Release date: 19 January, 2000

  Released by: UOX Dev Team/Freelancers

  Contributors: Dupois, Zippy, Abaddon, AntiChrist, JustMichael, Magius

  Fun Facts: Moongates! Escort quests!

  UOX3 v0.70.02t+

  Release date: 4 February, 2000

  Released by: UOX Dev Team/Freelancers

  #### March, 2000

  UOX3 v0.70.02.x to v0.70.03.15g

  Release date: 8 March, 2000

  Released by: UOX Dev Team/Freelancers

  Contributors: Abaddon, EviLDeD, Homey, Ripper, Zippy, Eagle, punt, Westy, AntiChrist, JustMichael, Xuri, Dupois, Magius

  Fun Facts: Boat improvements! Context-sensitive footstep sounds! Many many fixes!

  #### May, 2000

  UOX3 v0.70.03.16 to v0.70.03.18

  Release date: 29 May, 2000

  Released by: UOX Dev Team

  Contributors: Abaddon

  Fun Facts: Scriptable Port!

  UOX3 v0.70.03.18a

  Release date: 30 May, 2000

  Released by: UOX Dev Team

  #### June, 2000

  UOX3 v0.70.03.18b

  Release date: 15 June, 2000

  Released by: UOX Dev Team

  #### August, 2000

  UOX3 v0.70.03.18c

  Release date: 1 August, 2000

  Released by: UOX Dev Team

  Fun Facts: Also included revamped scripts (v37)!

  UOX3 v0.70.03.19

  Release date: 22 August, 2000

  Released by: UOX Dev Team

  Contributors: Gunther

  #### September, 2000

  UOX3 v0.70.03.19a

  Release date: 11 September, 2000

  Released by: UOX Dev Team

  Contributors: Gunther, Thyme

  UOX3 v0.70.03.19b

  Release date: 25 September, 2000

  Released by: UOX Dev Team w/Freelancers

  Contributors: Thyme, Chaos, Gunther, Knoxos, WIG

  #### October, 2000

  UOX3 v0.70.03.19c

  Release date: 9 October, 2000

  Released by: UOX Dev Team w/Freelancers

  Contributors: Dodger, Knoxos, Zippy, Thyme

  Fun Facts: Binary based spellbook spell storage! NPCs from spawn regions not saved!

  UOX3 v0.70.03.20

  Release date: 24 October, 2000

  Released by: UOX Dev Team w/Freelancers

  Contributors: Thaliq, Gunther, Chaos, Abaddon

  UOX3 v0.70.03.20a

  Release date: 25 October, 2000

  Released by: UOX Dev Team w/Freelancers

  Contributors: Knoxos

  UOX3 v0.70.03.20c

  Release date: 26 October, 2000

  Released by: UOX Dev Team

  #### November, 2000

  UOX3 v0.70.03.20d

  Release date: 6 November, 2000

  Released by: UOX Dev Team w/Freelancers

  Contributors: Oakwood, Knoxos

  UOX3 v0.70.03.20e TR1

  Release date: 22 November, 2000

  Released by: UOX Dev Team

  Fun Facts: Customizable delay for Explosion spell! Characters can fall forward AND backward when dying!

  UOX3 v0.70.03.20e TR2

  Release date: 23 November, 2000

  Released by: UOX Dev Team

  #### December, 2000

  UOX3 v0.70.03.20f

  Release date: 6 December, 2000

  Released by: UOX Dev Team

  Contributors: KKung, Xuri

  UOX3 v0.70.03.20g

  Release date: 17 December, 2000

  Released by: UOX Dev Team

  Fun Facts: CLUOX support added!

  #### January, 2001

  UOX3 v0.70.03.21

  Release date: 17 January, 2001

  Released by: UOX Dev Team

  Contributors: Xuri, Retalin, Jedda, Tom2, Correa, Knox

  Fun Facts: Random combat animations!

  UOX3 v0.70.03.21a

  Release date: 31 January, 2001

  Released by: UOX Dev Team w/Freelancers & NW Devs

  Contributors: Raftina, Jedda, Chaos, Thyme

  #### February, 2001

  UOX3 v0.70.03.21b

  Release date: 1 February, 2001

  Released by: UOX Dev Team

  UOX3 v0.70.03.21c

  Release date: 5 February, 2001

  Released by: UOX Dev Team

  Contributors: punt

  UOX3 v0.70.03.21c2

  Release date: 6 February, 2001

  Released by: UOX Dev Team

  Contributors: knox

  UOX3 v0.70.03.21d

  Release date: 16 February, 2001

  Released by: UOX Dev Team

  Contributors: Thunderstorm

  UOX3 v0.70.03.22

  Release date: 28 February, 2001

  Released by: UOX Dev Team

  Fun Facts: Players can no longer beg from offline players!

  UOX3 v0.70.03.23

  Release date: 21 March, 2001

  Released by: Freelancers Group

  UOX3 v0.70.03.24

  Release date: 9 April, 2001

  Released by: UOX Dev Team

  Fun Facts: Karma and Fame gain/loss for NPCs! Evil mongbats?

  UOX3 v0.70.03.24a

  Release date: 10 April, 2001

  Released by: UOX Dev Team

  Fun Facts: Recursive races!

  UOX3 v0.70.03.24b

  Release date: 15 April, 2001

  Released by: UOX Dev Team

  Fun Facts: NOHAIR race tag added, to ensure bald player monsters!

  0.95 Versions (2001 - 2002)

  #### July, 2001

  UOX3 v0.95.00 Build 1

  Release date: 3 July, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.00 Build 2

  Release date: ~3-11 July, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.00 Build 3

  Release date: ~3-11 July, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.01

  Release date: ~3-11 July, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.02 Build 1

  Release date: 11 July, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.03 Build 1

  Release date: 30 July, 2001

  Released by: UOX3 Dev Team

  #### August, 2001

  UOX3 v0.95.03 Build 2

  Release date: 7 August, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.04 Build 0

  Release date: 20 August, 2001

  Released by: UOX3 Dev Team

  #### September, 2001

  UOX3 v0.95.04 Build 1

  Release date: 14 September, 2001

  Released by: UOX3 Dev Team

  UOX3 v0.95.04 Build 2

  Release date: 19 September, 2001

  Released by: UOX3 Dev Team

  #### November, 2001

  UOX3 v0.95.07 Build 0

  Release date: 7 November, 2001

  Released by: UOX3 Dev Team

  #### January, 2002

  UOX3 v0.95.10 Build 0

  Release date: 8 January, 2002

  Released by: UOX3 Dev Team

  UOX3 v0.95.11 Build 0

  Release date: 9 January, 2002

  Released by: UOX3 Dev Team

  0.96 Versions - 2002

  #### January, 2002

  UOX3 v0.96.00 Build 0

  Release date: 22 January, 2002

  Released by: UOX3 Dev Team

  UOX3 v0.96.01 Build 0

  Release date: 4 February, 2002

  Released by: UOX3 Dev Team

  0.97 Versions (2002 - 2004)

  #### April, 2002

  UOX3 v0.97.0

  Release date: 26 April, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### September, 2002

  UOX3 v0.97.1.9

  Release date: 26 September, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.1.10

  Release date: 27 September, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.1.11

  Release date: 29 September, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.1.12

  Release date: 29 September, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### October, 2002

  UOX3 v0.97.1

  Release date: ~6 October, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.1_14

  Release date: 7 October, 2002

  Released by: EviLDeD

  Contributors: Brakhtus

  Fun Facts: Addition of OnClick and OnLogout JS events!

  UOX3 v0.97.1_16a and 16b

  Release date: 25 October, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### November, 2002

  UOX3 v0.97.01.16c and 16d

  Release date: 5 November, 2002

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### January, 2003

  UOX3 v0.97.01.16f

  Release date: 16 January, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.02.1a

  Release date: 21 January, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team (Xuri, Maarc, Dreoth, Brakhtus)

  UOX3 v0.97.02.1i

  Release date: 21 January, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.02.1j

  Release date: 27 January, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### March, 2003

  UOX3 v0.97.03.1

  Release date: 7 March, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.03.1f

  Release date: 11 March, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.03.1h

  Release date: 15 March, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.04.1a

  Release date: 23 March, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### May, 2003

  UOX3 v0.97.05.1b

  Release date: 4 May, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.05.3a

  Release date: 10 May, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.05.3e

  Release date: 14 May, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### June, 2003

  UOX3 v0.97.06.1c

  Release date: 18 June, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.1e

  Release date: 29 June, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.1f

  Release date: 30 June, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### July, 2003

  UOX3 v0.97.06.1i

  Release date: 27 July, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### August, 2003

  UOX3 v0.97.06.1j

  Release date: 1 August, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.1j(b)

  Release date: 2 August, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.1l

  Release date: 8 August, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.1m

  Release date: 14 August, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### September, 2003

  UOX3 v0.97.06.3d

  Release date: 7 September, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.5f

  Release date: 14 September, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.8g

  Release date: 19 September, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  UOX3 v0.97.06.9r

  Release date: 28 September, 2003

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  #### March, 2004

  UOX3 v0.97.06.9u

  Release date: 23 March, 2004

  Released by: EviLDeD

  Contributors: UOX3 Dev Team

  0.98 Versions (2004 - 2009)

  #### December, 2004

  UOX3 v0.98-2.5a

  Release date: 30 December, 2004

  Released by: EviLDeD

  Contributors: giwo, Xuri, che, Maarc

  Fun Facts: Support for new door types! Many GM commands move to JS!

  UOX3 v0.98-2.5b

  Release date: 31 December, 2004

  Released by: EviLDeD

  #### January, 2005

  UOX3 v0.98-2.5d

  Release date: 1 January, 2005

  Released by: EviLDeD

  Contributors: giwo

  UOX3 v0.98-2.6f

  Release date: 30 January, 2005

  Released by: EviLDeD

  Contributors: giwo, Maarc, Rynet

  #### February, 2005

  UOX3 v0.98-2.7

  Release date: 7 February, 2005

  Released by: giwo

  Contributors: Maarc

  UOX3 v0.98-2.7a

  Release date: 8 February, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.7b

  Release date: 10 February, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.7c

  Release date: 18 February, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.7d

  Release date: 18 February, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.8

  Release date: 26 February, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.8a

  Release date: 27 February, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.8b

  Release date: 28 February, 2005

  Released by: UOX3 Dev Team

  #### March, 2005

  UOX3 v0.98-2.8c

  Release date: 5 March, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.8d

  Release date: 11 March, 2005

  Released by: UOX3 Dev Team

  #### April, 2005

  UOX3 v0.98-2.8e

  Release date: 2 April, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-2.8f

  Release date: 14 April, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  UOX3 v0.98-2.8g

  Release date: 16 April, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  UOX3 v0.98-2.8h

  Release date: 22 April, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  #### June, 2005

  UOX3 v0.98-3.0

  Release date: 12 June, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson, Xuri, ShadowBranch

  UOX3 v0.98-3.0a

  Release date: 15 June, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  UOX3 v0.98-3.0b

  Release date: 16 June, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri, ShadowBranch

  #### July, 2005

  UOX3 v0.98-3.0c

  Release date: 14 July, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, ShadowBranch

  UOX3 v0.98-3.0d

  Release date: 16 July, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo

  #### August, 2005

  UOX3 v0.98-3.0e

  Release date: 4 August, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Maarc, Grimson, Xuri, Sydius

  UOX3 v0.98-3.0f

  Release date: 7 August, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, punt

  UOX3 v0.98-3.0g

  Release date: 13 August, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  #### September, 2005

  UOX3 v0.98-3.0h

  Release date: 13 September, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0i

  Release date: 13 September, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0j

  Release date: 20 September, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0k

  Release date: 23 September, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0l

  Release date: 27 September, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0m

  Release date: 27 September, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0n

  Release date: 29 September, 2005

  Released by: UOX3 Dev Team

  #### October, 2005

  UOX3 v0.98-3.0o

  Release date: 5 October, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0p

  Release date: 15 October, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.0q

  Release date: 17 October, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1

  Release date: 22 October, 2005

  Released by: UOX3 Dev Team

  Contributors: giwo, Maarc, Xuri

  Fun Facts: Improved map support! World save optimizations! 5.0.x clients supported!

  #### November, 2005

  UOX3 v0.98-3.1a

  Release date: 1 November, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1b

  Release date:31 November, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1c

  Release date: 5 November, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1d

  Release date: 20 November, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1e

  Release date: 23 November, 2005

  Released by: UOX3 Dev Team

  #### December, 2005

  UOX3 v0.98-3.1f

  Release date: 13 December, 2005

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1g

  Release date: 16 December, 2005

  Released by: UOX3 Dev Team

  #### January, 2006

  UOX3 v0.98-3.1h

  Release date: 28 January, 2006

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.1i

  Release date: 28 January, 2006

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.2

  Release date: 29 January, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri, Maarc, Grimson, longshot

  Fun Facts: Elven characters! LoS checks in JS engine!

  UOX3 v0.98-3.2a

  Release date: 29 January, 2006

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.2b

  Release date: 30 January, 2006

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.2c

  Release date: 31 January, 2006

  Released by: UOX3 Dev Team

  #### February, 2006

  UOX3 v0.98-3.2d

  Release date: 1 February, 2006

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.2e

  Release date: 2 February, 2006

  Released by: UOX3 Dev Team

  UOX3 v0.98-3.3

  Release date: 12 February, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Maarc, Xuri, Grimson

  UOX3 v0.98-3.4

  Release date: 20 February, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson, Maarc, Xuri

  #### March, 2006

  UOX3 v0.98-3.5

  Release date: 8 March, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson, Maarc, Xuri

  #### April, 2006

  UOX3 v0.98-3.6

  Release date: 5 April, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson, Maarc, Xuri

  UOX3 v0.98-3.6b

  Release date: 7 April, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson

  #### July, 2006

  UOX3 v0.98-3.7

  Release date: 8 July, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson, Xuri

  UOX3 v0.98-3.7a (CVS only)

  Release date: 9 July, 2006

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7b (CVS only)

  Release date: 10 July, 2006

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7c (CVS only)

  Release date: 15 July, 2006

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7d (CVS only)

  Release date: 18 July, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7e (Experimental Build)

  Release date: 24 July, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  #### August, 2006

  UOX3 v0.98-3.7f (CVS Only)

  Release date: 11 August, 2006

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7g (CVS only)

  Release date: 12 August, 2006

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  #### January, 2007

  UOX3 v0.98-3.7i (CVS only)

  Release date: 25 January, 2007

  Released by: UOX3 Dev Team

  Contributors: Grimson, Maarc, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7j (CVS only)

  Release date: 25 January, 2007

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7k (CVS only)

  Release date: 28 January, 2007

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  #### March, 2007

  UOX3 v0.98-3.7l (CVS only)

  Release date: 3 March, 2007

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson

  Fun Facts: Included in v0.98-4.0 release!

  #### April, 2007

  UOX3 v0.98-3.7m (CVS only)

  Release date: 9 April, 2007

  Released by: Grimson

  Fun Facts: Included in v0.98-4.0 release!

  #### May, 2007

  UOX3 v0.98-3.7n (CVS only)

  Release date: 25 May, 2007

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri, Grimson

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7o (CVS only)

  Release date: 26 May, 2007

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  #### June, 2007

  UOX3 v0.98-3.7p (CVS only)

  Release date: 12 June, 2007

  Released by: UOX3 Dev Team

  Contributors: giwo, Grimson, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  #### July, 2007

  UOX3 v0.98-3.7q (Experimental Build)

  Release date: 23 July, 2007

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  #### June, 2008

  UOX3 v0.98-3.7r (Experimental Build)

  Release date: 20 June, 2008

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri, Grimson

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7s (CVS only)

  Release date: 21 June, 2008

  Released by: giwo

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-3.7t (CVS only)

  Release date: 22 June, 2008

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri

  Fun Facts: Included in v0.98-4.0 release!

  #### November, 2008

  UOX3 v0.98-3.7u (Experimental Build)

  Release date: 12 November, 2008

  Released by: Maarc

  Fun Facts: Experimental OBDC database support! Included in v0.98-4.0 release!

  #### January, 2009

  UOX3 v0.98-3.7v (CVS only)

  Release date: 16 January, 2009

  Released by: UOX3 Dev Team

  Contributors: giwo, Xuri, Maarc

  Fun Facts: Included in v0.98-4.0 release!

  UOX3 v0.98-4.0

  Release date: 17 January, 2009

  Released by: UOX3 Dev Team

  Contributors: Grimson, Xuri, giwo, Maarc, Cavalier, supermoleet

  Fun Facts: First iteration of Parties! Customizable Client/Server Features! Movement speed per NPC!

  UOX3 v0.98-4.0a (CVS only)

  Release date: 18 January, 2009

  Released by: giwo

  Fun Facts: Included in v0.99 release!

  UOX3 v0.98-4.0b (CVS only)

  Release date: 19 January, 2009

  Released by: giwo

  Fun Facts: Included in v0.99 release!

  #### March, 2009

  UOX3 v0.98-4.0c (CVS only)

  Release date: 22 March, 2009

  Released by: UOX3 Dev Team

  Contributors: Xuri, Ghostwolf

  Fun Facts: Included in v0.99 release!

  #### January, 2010

  UOX3 v0.98-4.0d (CVS only)

  Release date: 28 January, 2010

  Released by: UOX3 Dev Team

  Contributors: Xuri, Shudderz, Ghostwolf, dragon slayer, Jediman

  Fun Facts: Included in v0.99 release!

  UOX3 v0.98-4.0e (Experimental Build)

  Release date: 31 January, 2010

  Released by: Xuri

  Fun Facts: Included in v0.99 release!

  #### February, 2010

  UOX3 v0.98-4.0f (Experimental Build)

  Release date: 1 February, 2010

  Released by: UOX3 Dev Team

  Contributors: Xuri, Shudderz

  Fun Facts: Included in v0.99 release!

  UOX3 v0.98-4.0g (Experimental Build)

  Release date: 1 February, 2010

  Released by: Xuri

  Fun Facts: Included in v0.99 release!

  UOX3 v0.98-4.0h (CVS only)

  Release date: 7 February, 2010

  Released by: UOX3 Dev Team

  Contributors: Xuri, Puck

  Fun Facts: Included in v0.99 release!

  #### December, 2011

  UOX3 v0.98-4.0i (Experimental Build)

  Release date: 14 December, 2011

  Released by: UOX3 Dev Team

  Contributors: Xuri, giwo, spdddmn

  Fun Facts: Included in v0.99 release!

  0.99 Versions (2012 - 2020)

  #### March, 2012

  UOX3 v0.99

  Release date: 19 March, 2012

  Released by: UOX3 Dev Team

  Contributors: Xuri, giwo, Ghostwholf, dragon slayer, xantier, Eolirin, puck, spdddmn, Shudderz, Jediman

  Fun Facts: New vendor related JS Events! Support for item names up to 128 characters! Revamped spell-damage and resist system! CombatExplodeDelay setting! Gargoyles!

  UOX3 v0.99.1

  Release date: 21 March, 2012

  Released by: UOX3 Dev Team

  Contributors: Xuri, dragon slayer

  #### November, 2012

  UOX3 v0.99.2

  Release date: 3 November, 2012

  Released by: UOX3 Dev Team

  Contributors: Xuri, dragon slayer

  Fun Facts: NPCs can spawn facing in random directions! Max region count increased from 255 to 65535! Amount support for LOOT and PACKITEM tags!

  UOX3 v0.99.2b

  Release date: 4 November, 2012

  Released by: Xuri

  UOX3 v0.99.2c

  Release date: 10 November, 2012

  Released by: Xuri

  Fun Facts: Global modifiers for combat speed/NPC spellcast speed!

  #### September, 2018

  UOX3 v0.99.2d

  Release date: 13 September, 2018

  Released by: Xuri

  #### November, 2019

  UOX3 v0.99.2h

  Release date: 24 November, 2019

  Released by: UOX3 Dev Team

  Contributors: Xuri, Kitiara

  Fun Facts: Custom tags can have negative values! Safezone region tag!

  #### April, 2020

  UOX3 v0.99.2i (Experimental Build)

  Release date: 12 April, 2020

  Released by: Xuri

  Fun Facts: Included in v0.99.3 release!

  #### August, 2020

  UOX3 v0.99.2m (Experimental Build)

  Release date: 8 August, 2020

  Released by: UOX3 Dev Team

  Fun Facts: Included in v0.99.3 release!

  #### September, 2020

  UOX3 v0.99.3

  Release date: 10 September, 2020

  Released by: UOX3 Dev Team

  Contributors: Xuri, punt, tuanhtrng

  Fun Facts: 64-bit cross-platform support across Windows, Linux and macOS! Full UOP map support! Instances! Revamped documentation!

  UOX3 v0.99.3a

  Release date: 16 September, 2020

  Released by: UOX3 Dev Team

  Contributors: Xuri

  #### November, 2020

  UOX3 v0.99.4

  Release date: ?? November, 2020

  Released by: UOX3 Dev Team

  Contributors: Xuri

  Fun Facts: Housing revamp!

- History of UO Emulation

  ### How it Got Started

  Emulation of the Ultima Online servers started all the way back in the days of the Alpha version of UO, when Denny Zuko (Jaegermeister) created the initial version of UOX (now lost to time). Since then, a great number of different emulators have come into existence, and although some of them were like fireflies that faded away after only a brief existence, others stuck around longer, spawned derivatives, forks and alternate versions along the way.

  For a more extensive and detailed overview, check out the General UO Emulator Timeline over at UOX3.org!

- Credits / UOX3 Hall of Fame

  The UOX3 Hall of Fame is simply a list of people (or their nicknames) known to have contributed to UOX3, in what capacity they (primarily) contributed, sorted in chronological order based on the estimated time of their first contribution.

  This list was written and is updated with the help of various UOX3 documents such as changelogs, news updates, code comments and some educated guesses, and errors might occur. If you spot a mistake, or a missing name, let us know and we'll do our best to correct the issue.

  ### 1997

  Jaegermeister
  Denny Zuko, Programmer, Creator of original UOX

  Cironian
  Marcus Rating, Programmer, Creator of original UOX2/UOX3

  Drax
  Original Scripter, 26/11/1997, v0.46

  Jason Koon
  Designed original UOX3 logo, 06/11/1997

  ### 1998

  Morac
  Programmer, 0.67c)

  Jerrith the Healer
  AR Schelicher, Programmer, UO Packet Guide - 0.67c)

  Tracker/Traker
  Programmer, ~June 1998)

  Fafnir/Aagorn/Delorim
  Programmer, ~June 1998)

  Anthracks
  Jonathan Henry, Scripter/Programmer, Keeper of Code Snippets - 0.67c)

  TBM
  Programmer, 0.67c

  Cray XMP1
  Programmer, 0.67c

  Gitchigoomi
  Scripter - 0.67i

  Monte Cristo
  Programmer, 0.67i

  Okaria Dragon
  Programmer, 0.67i

  Zarn
  Programmer, 0.67l

  Crimson Guard
  Programmer, 0.67l

  Drylock
  Erwin S. Andreasen, Programmer, 0.67n

  Ash
  Programmer, 0.67n

  El Barto
  Programmer, 0.67r+

  RofGilead
  Programmer, 0.67q

  Maytrix
  Programmer, 0.67w

  Tal Strake
  Programmer

  Fearicon
  Scripter, 0.67x

  Ashran
  Programmer, creator of EQ Emu, and UOisc, a tool that allowed copying items to UOX3 worldfiles by walking around on OSI servers

  Beosil
  Bruno Heidelberger, Programmer, Encryption Guru

  Krozy
  Lucas Moten, Programmer

  SirGonads
  Programmer

  Milan Rabaa
  Programmer

  Sir Joseph
  Programmer

  Halin Talismoon
  Programmer

  Polaris
  Programmer

  Kathrrack/Kathrakk
  Programmer

  TANis/Quintoxis
  Valerio Santinelli, Programmer

  Jim/Jim Wright
  Programmer

  Brad
  Programmer

  Friend/Brother Kane
  Programmer

  Ridcully
  Jan Lübbe, Programmer, Tool Programmer

  Armageddon
  Programmer

  Pug
  Scripter, The Script Team, < 07/31/98

  Concerned Watcher
  Lee Brown, Scripter, The Script Team, < 07/31/98

  Cruoris
  Scripter, The Script Team, < 07/31/98

  NoFx
  Scripter, < 07/31/98

  Rootdown
  Scripter, < 07/31/98

  Nevets
  Scripter, < 07/31/98

  Dante
  Scripter, The Script Team, 8/31/98

  Vagrant
  Programmer, ~September 1998

  Mad Hatter
  Michael De Piazzi, Programmer, ~September 1998

  Fizz
  Programmer, ~1998

  McCleod
  Programmer

  Hunter
  Programmer

  Tao
  Programmer

  DasRaetsel
  Programmer

  Bud
  Programmer,

  SpaceDog
  Kasper K. Andersen, Programmer

  Tauriel
  Karl Kirk, Programmer

  Dupois
  Programmer, MsgBoard/Escort System

  CyberCrusher
  Programmer

  Moongraven
  Programmer

  Gerry
  Gerry Thibodeau, Programmer

  Lord Slayer
  Programmer

  Zadius
  Programmer, Trigger System

  Max Wulf
  Programmer

  Genesis
  Scripter/Programmer

  Myca
  Programmer

  Algaran
  Scripter/Programmer, 12/09/1998

  Rin'thral
  Scripter, ~November 1998

  HellRaider
  Scripter, The Script Team, 10/05/1998

  Dupre the Fighter
  Scripter, 10/05/1998

  Danath
  Scripter, The Script Team, 10/05/1998

  Nattsorgh
  Programmer, 13/11/1998, Ran UOX3 Snippet Repository at http://home3.swipnet.se/~w-36372/

  redbaron
  Programmer, 13/11/1998

  Thunderstorm
  Programmer, 13/11/1998

  Myth
  Programmer, 13/11/1998

  Ripper
  Scripter/Programmer, 17/11/1998 - eventually founded Wolfpack Emu (https://web.archive.org/web/20000818115820/http://members.home.net/farmrr/)

  Zippy
  Bryan Pass, Programmer, v0.68.026.07

  Ray
  Programmer, ??/??/98, v0.68.026.07

  EvilDeD
  Matthew Randall, Programmer, DevTeam Lead, Web Admin, CVS admin, v69.00-v0.98.x

  Pellinore Dragon
  Programmer, v69.01

  Homey
  Programmer, v69.02

  Crwth
  Wayne Pearson, Programmer, v69.02

  Phantom
  Programmer, v69.02

  Wolfgang
  Programmer, v69.02

  ### 1999

  Revana
  Adrian Balij, Programmer, v0.69.03

  Retalin
  Ryan McAdams, Scripter/Programmer, Web Admin, 04/01/1999

  Sephiroth
  Sean Hogberg, Scripter - 16/01/1999

  GM Santa's Helper
  Scripter, 28/01/1999

  Ashen Gray
  Scripter, 01/02/1999

  Cork
  Scripter, 07/02/1999

  Klick
  Scripter, 15/02/1999

  Ison
  Programmer, 20/02/1999

  Solomon
  Scripter, 25/02/1999

  Sayter/Zophar
  Scripter, 25/02/1999

  Westy
  Peter Westberg, Programmer, Encryption Guru, 18/03/1999

  punt
  Charles Kerr, Scripter/Programmer, Tool Programmer, 04/04/1999

  Darkness
  Scripter, 04/04/1999

  Magius
  Scripter/Programmer, 25/05/1999, Advanced Trade System

  Sir Pedro
  Scripter/Programmer, 25/05/1999

  Bug
  Scripter/Programmer, 25/05/1999

  Mark
  Scripter/Programmer, 25/05/1999

  Morrolan
  Programmer, 20/07/1999

  Crackerjack
  Programmer, 09/08/1999

  AntiChrist
  Programmer, ??/10/1999

  Abaddon/Maarc
  Daniel Stratton, Programmer, v0.69.03 -> v0.70.01.07t

  fur
  Programmer, 27.10.1999, v0.69.03 -> v0.70.01.07t

  Eagle
  Brandon Holtsclaw, Scripter/Programmer/Web Admin, v0.69.03 -> v0.70.01.07t

  Krazyglue
  Programmer, 03/10/1999, v0.69.03 -> v0.70.01.07t

  Quippl
  Programmer, v0.69.03 -> v0.70.01.07t

  Mithos
  Programmer, v0.69.03 -> v0.70.01.07t

  Lord Binary
  Programmer, v0.69.03 -> v0.70.01.07t

  JustMichael
  Michael Horton, Programmer, Tool Programmer, v0.69.03 -> v0.70.01.07t

  Tseramed
  Programmer, 04/10/1999, v0.69.03 -> v0.70.01.07t

  Terrin
  Programmer, 08/10/1999, v0.69.03 -> v0.70.01.07t

  Kashyyyk
  Programmer, v0.69.03 -> v0.70.01.07t

  Daemar
  Programmer, v0.69.03 -> v0.70.01.07t

  Mike
  Programmer, v0.69.03 -> v0.70.01.07t

  Cestle
  Scripter, 29/11/1999

  RevalutionShadow
  Scripter, 29/11/1999

  Infinity
  Scripter, 29/11/1999

  Folci
  Scripter, 29/11/1999

  Banter
  Programmer, ~1999

  ### 2000

  Xuri
  Geir Ove Alnes, Scripter/Programmer, Tool Programmer, Web Admin, 21/01/2000

  Skyfire
  Scripter/Programmer, ~March 2000, 0.70.x era

  Shrike
  Scripter, 12/04/2000

  Jerelith
  Scripter, 12/04/2000

  Hanse
  Thomas Edison, Programmer, 04/05/2000

  Frazurbluu
  Scripter, 01/08/2000

  Unseen
  Scripter/Programmer, ~06/08/2000

  Gunther
  Programmer, 22/08/2000, 0.70.03.19

  Thyme
  Programmer, 11/09/2000, 0.70.03.19a

  Chaos
  Michael Weis, Programmer, 25/09/2000, 0.70.03.19b

  Knoxos
  Programmer, 25/09/2000, 0.70.03.19b

  WIG
  Programmer, 25/09/2000, 0.70.03.19b

  Dodger
  Programmer, 09/10/2000, 0.70.03.19c

  Thaliq
  Programmer, 24/10/2000, 0.70.03.20

  GM Azrael
  Scripter, 24/10/2000

  Oakwood
  Programmer, 06/11/2000, 0.70.03.20d

  Leafbeach
  Programmer, November-December 2000

  KKung
  Programmer, 06/12/2000, 0.70.03.20f

  Rain-
  Programmer, ~January 2000

  Lord Vader
  Programmer, ~2000

  Grady
  Programmer, ~2000

  ### 2001

  Rainman/Cobol Junky
  Web Admin, ~Jan-Sept 2001

  Jedda
  Programmer, 17/01/2001, 0.70.03.21

  Tom2
  Programmer, 17/01/2001, 0.70.03.21

  Correa
  Thiago A. Corrêa, Programmer, Freelancers, 17/01/2001, 0.70.03.21

  anshil
  Axel Kittenberger, Programmer, Freelancers, 25/01/2001, 0.70.03.21

  Raftina
  Scripter, 31/01/2001, 0.70.03.21a

  RostamTheGrey
  Daniel K. Olds, Programmer, ~early 2001

  Calvin
  Scripter, < February 2001, < v0.0.70.03.21d

  Frank Lubber
  Programmer, Freelancers, 24/02/2001, v0.0.70.03.21d

  TTP
  Programmer, Freelancers, 14/03/2001

  Yeshe
  Carsten Germer, Scripter, 08/05/2001

  Zane/Giwo
  Scott Thompson, Scripter/Programmer, Web Admin, 03/07/2001

  seank
  Programmer, 04/07/2001

  Gimli
  Programmer, 12/07/2001

  Dreoth
  Scripter/Programmer, ~2001-2003

  harkon
  Programmer, 0.95.01 Build 1

  Mr_Fixit
  Daniel Storjordet, Programmer, Tool Programmer, 0.95.01 Build 1, UOGateway

  JoeMC
  Programmer, 0.95.01 Build 1

  Spud
  Programmer, 05/08/2001

  Shadowlord
  Programmer, 01/11/2001

  Krrios
  Programmer, 05/11/2001, creator of KUOC - Krrios UO Client, ModifyUO and RunUO

  Bel-CMC
  Programmer, 12/11/2001

  silver2000
  Programmer, 19/12/2001

  DarkStorm
  Programmer, 20/12/2001

  ### 2002

  Rukus
  Programmer, 0.97.00 Build 20

  kot_Leopold
  Programmer, 0.97.00 Build 20

  Norfic
  Scripter, 0.97.00 Build 20

  Weazel
  Scripter, 0.97.00 Build 20

  duckhead
  Programmer, 0.97.00 Build 20

  SwamiHajjiJoe
  Scripter, 02/01/2002

  Cavalier
  Chris Bailey, Scripter, 12/01/2002

  sereg
  Scripter/Programmer, 15/02/2002

  §ymb!ot!c
  Ben Bellert, Scripter, 17/03/2002

  Lynxx
  Scripter, 11/03/2002

  MACTEP
  Programmer, 18/04/2002

  avtotar
  Programmer, 16/09/2002

  Brakhtus
  Programmer, 25/09/2002, 0.97-1.7

  ### 2003

  Malketh
  Programmer, 19/03/2003

  Philantrop
  Programmer, 19/03/2003

  almiller1963
  Programmer, 07/05/2003, v0.97.5.2g

  #### 2004

  xir
  Programmer, 31/07/2004

  ### 2005

  Grimson
  Programmer, 07/06/2005, 0.98.3-0

  ShadowBranch
  Daniel Moree, Programmer, 11/06/2005, 0.98-3.0

  lingo
  Lingo Chen, Programmer, 05/08/2005, 0.98-3.0e

  ### 2006

  Fish
  Scripter, 29/01/2006, 0.98-3.2

  jr
  Programmer, 05/05/2006, 0.98-3.6

  ### 2007

  supermoleet
  Programmer, 17/01/2009, 0.98-4.0

  Jediman
  Programmer, 05/11/2009

  ### 2008

  Ghostwolf
  Scripter, 19/03/2012, 0.99

  dragon slayer
  Scripter, 19/03/2012, 0.99

  xantier
  Programmer, 19/03/2012, 0.99

  Eolirin
  Programmer, 19/03/2012, 0.99

  Puck
  Scripter, 19/03/2012, 0.99

  spddmn
  Programmer, 19/03/2012, 0.99

  Shudderz
  Programmer, 19/03/2012, 0.99

  ### 2020

  tuanhtrng
  Tuan H. Truong, Programmer, 17/04/2020

  ### Additional Tool Programmers

  Chaos
  Tool Programmer, the original CGMT chaos - https://web.archive.org/web/20010119120600//http://www.prodes.org/cgmt/

  Decius
  Daniel Paull, Tool Programmer, UOXSE

  ### Honorable Mention

  Fallo
  Encryption Guru)

  Terry Denham
  Fileformat Analytic

  Krazow
  Provided early web server for UOX3 at Warlords.com

  Danny Thomas
  Helped fix No-IP client crash

  Alkiser
  Web Designer/Admin of uoxdev.com, ~early 2000

  Infymus
  Michael Hoenie, Tool Programmer, ~2001

  Duke
  Lonewolf developer

  Coren
  Mark A. Pelletier, UOR/OU emulator

  Sheppard
  Creator of UOOS emulator

  ### To Place in Timeline

  Allmight
  Documentation, ~November 1998

  TeHb
  Scripter, ~November 2002

  Tim
  ???

  ### Active Contributors

  Contributors active within last year (as of June 2021):

  Xuri, punt, giwo, tuanhtrng, Dragon Slayer

Close

Documentation revamp by Geir Ove Alnes @ Copyright 2020 - 2021

Built upon FAQ Template framwork provided by CodyHouse.