This wiki is sort of my Road Map to a highly customized RunUO-server. My first goal is to set up a full blown server for learning and testing purposes - I will create easy-to-understand step-by-step instructions and collect tabular data, which might be useful for GMs. This wiki might become a useful reference manual for scripting one day. Currently, it is read-only to the public and totally chaotic. Sorry!


Downloads are listed on the Links page.

Setup RunUO 2.0 Final

Install the software

  • Download: setup-, Razor_Latest.exe, .NET Framework,, Nerun's Distro 5.1.5 - SVN, XmlSpawner2-20-v324-[1|2|3]
  • Install or copy the client's program folder (Default: C:\Program Files\EA Games\Ultima Online 2D Client\)
  • to D:\RunUO\UO2d-client-\
  • Install the .NET frame work
  • Extract RunUO into D:\RunUO\RunUO-2.0-Final\
  • Extract Nerun's Distro and copy the folders "Data" and "Scripts" over the RunUO's directories, replacing existing files.
  • (To call the spawn menu type [premiumspawner In-Game)
  • Copy the files from xmlspawner to Scripts/CUSTOM/XmlSpawner

Adjust the scripts

  • Scripts/Misc/AutoSave.cs L10: TimeSpan.FromMinutes( 60.0 ) - one hour
  • Scripts/Misc/DataPath.cs L16: private static string CustomPath = @"D:\RunUO\UO2d-client-"
  • Scripts/Misc/SkillCheck.cs L127, L130: change to gc /= 0.01; for ultra fast skill gain (0.5 recommended for "fast")
  • Scripts\Accounting\AccountHandler.cs L23: private static int MaxAccountsPerIP = 99;
  • Scripts\Accounting\AccountHandler.cs L?: private static bool AutoAccountCreation = true;
  • Scripts\Misc\Test Center\TestCenter.cs L11: private const bool m_Enabled = true;
  • Scripts\Misc\SocketOptions.cs L14: private const int CoalesceBufferSize = 512; smaller for LAN play (32)
  • Scripts\Multis\BaseHouse.cs L3077: if ( allHouses.Count > 3 ) return true; Max. houses per character
  • Scripts\Items\Construction\Doors\BaseDoor.cs L190ff: Time, how long doors stay open
  • Scripts\Regions\GuardedRegions.cs L172: return true; Allows houses to be placed almost everywhere (in towns, too)
  • Scripts\Misc\CurrentExpansion.cs L12: Mobile.InsuranceEnabled = !Enabled; Disable insurance
  • Scripts\Misc\CurrentExpansion.cs L8: private static readonly Expansion Expansion = Expansion.ML; None, AOS, SE, ML
  • Scripts\Mobiles\Vendors\BaseVendor.cs L45: public virtual bool IsInvulnerable { get { return !true; } } Shop keepers no longer invulnerable, thus one can steal from them
  • Scripts\Skills\Stealing.cs L61-L77: comment out code to prevent stealing, while not in Thieves Guild or when attempted to steal from a shop keeper
  • Scripts\Misc\ServerList.cs L42: Change shard name
  • Scripts\Misc\ServerList.cs L41, L44: set a fixed IP address
  • Scripts\Misc\ServerList.cs L46: Add Item.DefaultDecayTime = TimeSpan.FromHours( 20.0 ); to public static void Initialize() for different global item decay time
  • Scripts\Mobiles\Vendors\NPC\Tailor.cs L44ff: Adjust BOD delay


  • [startallregionspawns - get crops to the fields
  • There is a "Staff Cloak" in which lets you temporarily become a normal "Player"
  • In XmlSpawner, the parameter female/true is allowed, but seems to have no effect. To create a certain individual, let's say Sarah, the healer, you [add xmlspawner and enter healer/name/Sarah/female/true/bodyvalue/401
  • [add xmlspawner
  • [xmledit
  • [xmlfind
  • [xmlhide [xmlshow


  1. L31: start gold
  2. L33: change to: PackItem( new Lantern() ); - nobody wants a candle
  3. L574-L578: This switch creates either a kilt or a skirt
  4. L653: young=false - not using Haven L750??, L829ff - always return args.City
  5. L694: Change to CityInfo city = args.City; for players to be able to choose start town again (

Multiple Houses Per Account

Scripts\Multis\BaseHouse.cs L3059ff, change whole function into:
////public static bool HasAccountHouse( Mobile m )
    Account a = m.Account as Account;
    if ( a == null )
        return false;
    ArrayList allHouses = new ArrayList();
    for ( int i = 0; i < a.Length; ++i )
        Mobile mob = a[i];
        if ( mob != null )
            allHouses.AddRange( GetHouses( mob ) );
    // 3 means 4 house limit. Same thing with any number. You want 2 houses? Set it to 1:
    if ( allHouses.Count > 3 ) return true;
    //...for ( int i = 0; i < a.Length; ++i )
    //...    if ( a[i] != null && HasHouse( a[i] ) )
    //...        return true;
    return false;

One Facet Only

Scripts\Items\Misc\PublicMoongate.cs L287ff:
////public static readonly PMList[] UORLists      = new PMList[] { Trammel /*Trammel, Felucca*/ };  //... Trammel only
public static readonly PMList[] UORListsYoung = new PMList[] { Trammel /*Trammel*/ };
public static readonly PMList[] LBRLists      = new PMList[] { Trammel /*Trammel, Felucca, Ilshenar*/ };
public static readonly PMList[] LBRListsYoung = new PMList[] { Trammel /*Trammel, Ilshenar*/ };
public static readonly PMList[] AOSLists      = new PMList[] { Trammel /*Trammel, Felucca, Ilshenar, Malas*/ };
public static readonly PMList[] AOSListsYoung = new PMList[] { Trammel /*Trammel, Ilshenar, Malas*/ };
public static readonly PMList[] SELists       = new PMList[] { Trammel /*Trammel, Felucca, Ilshenar, Malas, Tokuno*/ };
public static readonly PMList[] SEListsYoung  = new PMList[] { Trammel /*Trammel, Ilshenar, Malas, Tokuno*/ };
public static readonly PMList[] RedLists      = new PMList[] { Trammel /*Felucca*/ };
public static readonly PMList[] SigilLists    = new PMList[] { Trammel /*Felucca*/ };////
Scripts/Misc/MapDefinition.cs L19ff:
//////RegisterMap( 0, 0, 0, 7168, 4096, 4, "Felucca",  MapRules.FeluccaRules );
RegisterMap( 1, 1, 1, 7168, 4096, 0, "Trammel",  MapRules.FeluccaRules );  //... MapRules.TrammelRules
RegisterMap( 2, 2, 2, 2304, 1600, 1, "Ilshenar", MapRules.FeluccaRules );  //... MapRules.TrammelRules
RegisterMap( 3, 3, 3, 2560, 2048, 1, "Malas",    MapRules.FeluccaRules );  //... MapRules.TrammelRules
RegisterMap( 4, 4, 4, 1448, 1448, 1, "Tokuno",   MapRules.FeluccaRules );  //... MapRules.TrammelRules//////

Tweak items, NPC vendors buy and sell


Create Custom Colors

"True Black" RGB(0,0,0) is ugly. Adding a "Realistic Black" can be done by tweaking HUES.MUL in the client folder. All clients will have to download this edited version of the mul file in order to see the new colors.
  • Download and start UOHueEditor.exe
  • Select your client folder (which is used by the RunUO server)
  • Find a free (black) color slot, best in larger black areas. E.g. 1990 (0x7c6)
  • Double click to get a popup window, which will show a black area of 16 slots.
  • Double click the leftmost slot to choose a color. Use RGB(1,1,1).
  • Double click the rightmost slot and set RGB(4,4,4) (the effective color in game is almost black on CRTs, but relateively bright on TFTs)
  • Mark all slots by clicking on the leftmost slot and dragging the mouse to the right, then release the button
  • Click "Spread" to create a smooth gradient
  • Click "OK" and save the file, then distribute it to your clients
  • In game, you can [set hue 1991 / <target object> - The codes in game are offset by 1!

Admin/GM Commands

Tweaking the world (In-Game)

  • [clearfacet - removes NPCs, Gates, Doors, Items (Everything?)
  • [doorgen - creates doors according to map
  • [decorate - decorates (places items like chairs, beds, etc - from map??)
  • [decoratemag - seems to decorate Magincia for maps after the war
  • [genstealarties / [removestealarties
  • [secretlocgen - generates mark containers to Malas secret locations
  • [genlamppuzzle - generates lamp room puzzle in doom
  • [signgen - creates road signs (is this function "intelligent"?)
  • [telgen - creates world/dungeon teleporters for all facets
  • [shtelgen - creates solen hive teleporter
  • [moongen - creates common moon gates
  • [vendorgen - places vendors in the current facet, based on rooms and display cases (slow)
  • [uoamvendors - places vendors ("OSI accuracy"), including minters
  • [spawngen - creates spawns (slow, what effect does it have?)

  • [add banker / <target location> - creates a banker NPC
  • [add minter / <target location> - creates another banker NPC (minter works for sure)
  • [add bankcheck <amount>
  • [addmenu regstone - creates a stone, which gives a bag of reagents on doubleclick
  • [addtopack <item name>
  • [bringtopack / <target [nonmovable] item>

  • [restart - reboots the server
  • [toolbar - open the GM/Admin toolbar (Nerun's Distro)

  • [flip - Turns an object (if it has the ability. E.g. Clock)

Game Master Commands

  • [go [ <location name> | <serial> | <x y [z]> | <deg min> (N | S) <deg min> (E | W) ]
    location name: Use quotation marks, if the name contains white space. E.g. [go "skara brae" - where the names are taken from Data/Locations/*.xml - see Scripts/Gumps/Go/GoGump.cs
  • [allspells / <target spell book>
  • [skills / <target avatar>

Set a Spawner

  • [add spawner [<item name>] / <target location>
  • [<double click spawner> / <enter name(s) of entities to spawn>]
  • [set count <number max spawns>
  • [set homerange <tiles radius>
  • [<double click spawner> / Total Respawn]

Find a Spawner


  • [spawner / Page 2 / Spawn Editor / Filter By Distance 10 / <click right arrow> / <select from results> / Go to Spawner
  • [spawneditor / <see above>


  • [xmlfind

Add/remove accounts

  • Create a new account: [admin / Account List / <enter name and password> / Add
  • Delete/change account: [admin / Account List / [<enter name>] / Search / Delete Account

Creating a mount and assigning owner

  • [addmenu horse / <select a mount, e.g. "horse"> / <target location>
  • [props / <target mount> / Control Master / <target new owner>
  • [props / <target mount> / Controlled / TRUE
  • Not fully functional yet: [props / <target mount> / Body Value / { 200 (light brown) | 204 (dark brown) | 226 (light gray) | 228 (gray-brown, default) } - when player rides the horse, it is drawn light grey, no matter what color the horse has allone.

Optional Tools


  • Download and extract to D:\RunUO\InsideUO\
  • Add full paths to all <..._file> tags in InsideUO.xml after L1150 (Right after the comment: <!-- Map "Area" tag format is:...)
    (e.g. <Map_file>D:\RunUO\UO2d-client-\MAP0.MUL</Map_file>)

To Do

  • Character created with bowcraft/fletching: missing tools in backpack.
  • Smith doesn't sell hatchets? (some do!)
  • Quests
  • Multiple Accounts/IP
  • Weather
  • Time Speedup
  • Skillcap 1000
  • Ex/Import Player-Data
  • Create Admin/GM accounts / grant GM permissions

To Research


  • Scripts\Spells\Base\SpellHelper.cs L351: public static bool ValidIndirectTarget( Mobile from, Mobile to )
    If always returning true, field spells start having effects on other players, but still not on the caster
  • Scripts\Spells\Fifth\PoisionField.cs L221: protected override void OnTick() calculates damage

  • Scripts\Accounting\Accounts.cs
  • public static readonly TimeSpan YoungDuration = TimeSpan.FromHours( 40.0 );
  • public static readonly TimeSpan InactiveDuration = TimeSpan.FromDays( 180.0 );

Edit Skill Gain Speed/Anti-Macro measurements

Editing skill gain is quite simple, Just head over to scripts\misc\Skillcheck.cs
Now, As you can see there is some anti-macro code. If you disable these, They will make skillgain Much easier. However note, this will not increase actual skill gain speed, but will turn off the code that prevents you from getting only 3 gains in one tile. Turn off whichever anti macro codes you wish, I turn them all off. Now, want to edit the actual skill gain speed? Okay, easy enough. Now. Go to Line 127. Line 127 should be this "gc /= 2;" 2 is the skillgain number. 10 would be REALLY slow gain, while .25 would be fast gain. I suggest starting off at .50 and working your way around, use different skills, and see which speed is right for you. NOTICE. you must also edit the "gc /= 2;" Below line 127, there are two, edit them both to the same thing. There you go! you edited skill gain speed =P. (From

Reagent Spawns