UO Architect 2.7.# Installation Steps for ServUO - 57 to Current (7/2021)

OldManPsylus

Citizen
*As per Milva's request, this is a reposting of the steps I shared in the "UO Architect won't compile - trying to follow the instruction" thread. Without further ado:

Alright gang, looks like nobody has posted about this in a while - for those still struggling with this, I seem to have figured it out for both release 57 and the latest release. The methods are slightly different, but here's a step-by-step:
______________________________________________________________________________________________________

Things you'll need:

1. Download UOArchitect version 2.7.# (Misc - UO Architect)
2. A working (buildable) copy of either ServUO-57 or the latest version as of this post.
3. Visual Studio 2019: Community Edition (It probably works with other versions, but this is what I use. It's free, just google it if you don't yet have it.)
______________________________________________________________________________________________________

Steps for both ServUO 57 and latest releases:

1 a. Open your ServUO.sln in VS2019.
b. Extract both the Client and Server folders from the UOArchitect zip. Doesn't matter where, but for organization sake, let's not put it in the ServUO folder just yet.

2. In the Solution Explorer (far right side) of Visual Studio, if you don't already have it, right click on "Scripts" and go to "add" -> "new folder". Name it "Customs".

3. Open the Server folder that you previously extracted from UOArchitect's zip. Drag the folder called "OrbRemoteServer" into the Visual Studio Solution Explorer, and drop it into the Customs folder that you just made in the previous step.

4. Navigate into the OrbRemoteServer\UOArchitect folder that you just added and open MobileSaver.cs. Find the following lines and comment out "spawner.SpawnNames.Add( t.ToString() );
MobileSaver.cs spawner.SpawnNames:
public static Spawner LoadMobile( Item item )
{
Type t = GetType( item.Z - Offset );

if ( t == null )
return null;

Spawner spawner = new Spawner();
//spawner.SpawnNames.Add( t.ToString() );
spawner.Running = true;
spawner.HomeRange = 0;
spawner.WalkingRange = 4;
//spawner.Respawn();
return spawner;
}

5. In the same MobileSaver.cs, find the line that says "ConversionTable.Add( typeof( FortuneTeller ) );" and comment it out as well
MobileSaver.cs FortuneTeller:
// Healers
ConversionTable.Add( typeof( EvilHealer ) );
ConversionTable.Add( typeof( EvilWanderingHealer ) );
//ConversionTable.Add( typeof( FortuneTeller ) );
ConversionTable.Add( typeof( Healer ) );
ConversionTable.Add( typeof( PricedHealer ) );
ConversionTable.Add( typeof( WanderingHealer ) );

6. In your root ServUO folder where your ServUO.sln file is (not inside of Visual Studio), paste the three .dll files from the Server folder that you extracted from the UOArchitect zip. They should be called "OrbServerSDK.dll", "System.Runtime.Remoting.dll", and "UOArchitectInterface.dll".

7. Now, using the file explorer (not in Visual Studio), navigate to your ServUO\Data folder and open the Assemblies.cfg file. Append to the end of this file the following three lines:
Assemblies.cfg:
OrbServerSDK.dll
System.Runtime.Remoting.dll
UOArchitectInterface.dll

Thus ends the parts that are the same between release 57 and the current ServUO release - now go to whichever set of instructions apply to you:
______________________________________________________________________________________________________

ServUO - release 57 additional instructions:

1. Inside of Visual Studio, in the Solution Explorer, right click on "Scripts" and go to "add"->"Reference...". Under the "Browse" tab, in the bottom right hand corner click on "Browse...". Navigate to your ServUO folder and find the three .dlls that we pasted there. "OrbServerSDK.dll", "System.Runtime.Remoting.dll", and "UOArchitectInterface.dll". Add them, make sure their check boxes are checked, then click "OK".

2. Build your solution and cross your fingers that no errors come up. Launch your ServUO.exe and cross your fingers even harder. If the build does not work, then your problem is either with the previous step regarding references, or you might not have commented out the right lines properly. If the build works but your server console is a big wall of red text on startup, then your Assemblies.cfg isn't set up correctly and needs another look.
______________________________________________________________________________________________________

ServUO - Current release (as of this post) additional instructions:

1. Inside of Visual Studio, in the Solution Explorer, right click on "Scripts" and go to "add"->"Project Reference...". Under the "Browse" tab, in the bottom right hand corner click on "Browse...". Navigate to your ServUO folder and find the three .dlls that we pasted there. "OrbServerSDK.dll", "System.Runtime.Remoting.dll", and "UOArchitectInterface.dll". Add them, make sure their check boxes are checked, then click "OK".

2. Navigate once again to your MobileSaver.cs file inside of Visual Studio. The current version of ServUO has a LOT more lines we'll need to comment out. They are as follows: (No lines above Townfolk need to be commented)
MobileSaver.cs Current ServUO version:
// Townfolk
ConversionTable.Add( typeof( Actor ) );
ConversionTable.Add( typeof( Artist ) );
ConversionTable.Add( typeof( Banker ) );
//ConversionTable.Add( typeof( BrideGroom ) );
//ConversionTable.Add( typeof( EscortableMage ) );
ConversionTable.Add( typeof( Gypsy ) );
ConversionTable.Add( typeof( HarborMaster ) );
//ConversionTable.Add( typeof( Merchant ) );
//ConversionTable.Add( typeof( Messenger ) );
ConversionTable.Add( typeof( Minter ) );
ConversionTable.Add( typeof( Ninja ) );
//ConversionTable.Add( typeof( Noble ) );
//ConversionTable.Add( typeof( Peasant ) );
ConversionTable.Add( typeof( Samurai ) );
ConversionTable.Add( typeof( Sculptor ) );
//ConversionTable.Add( typeof( SeekerOfAdventure ) );
ConversionTable.Add( typeof( TownCrier ) );
// Guards
ConversionTable.Add( typeof( ArcherGuard ) );
ConversionTable.Add( typeof( WarriorGuard ) );
// Healers
ConversionTable.Add( typeof( EvilHealer ) );
ConversionTable.Add( typeof( EvilWanderingHealer ) );
//ConversionTable.Add( typeof( FortuneTeller ) );
ConversionTable.Add( typeof( Healer ) );
ConversionTable.Add( typeof( PricedHealer ) );
ConversionTable.Add( typeof( WanderingHealer ) );
#endregion

#region Animals
// Animals Bears
ConversionTable.Add( typeof( BlackBear ) );
ConversionTable.Add( typeof( BrownBear ) );
ConversionTable.Add( typeof( GrizzlyBear ) );
ConversionTable.Add( typeof( PolarBear ) );
// Animals Birds
ConversionTable.Add( typeof( Chicken ) );
ConversionTable.Add( typeof( Crane ) );
ConversionTable.Add( typeof( Eagle ) );
ConversionTable.Add( typeof( Phoenix ) );
// Animals Canines
ConversionTable.Add( typeof( DireWolf ) );
ConversionTable.Add( typeof( GreyWolf ) );
ConversionTable.Add( typeof( TimberWolf ) );
ConversionTable.Add( typeof( WhiteWolf ) );
// Animals Cows
ConversionTable.Add( typeof( Bull ) );
ConversionTable.Add( typeof( Cow ) );
// Animals Felines
ConversionTable.Add( typeof( Cougar ) );
ConversionTable.Add( typeof( HellCat ) );
ConversionTable.Add( typeof( Panther ) );
ConversionTable.Add( typeof( PredatorHellCat ) );
ConversionTable.Add( typeof( SnowLeopard ) );
// Animals Misc
ConversionTable.Add( typeof( Boar ) );
ConversionTable.Add( typeof( BullFrog ) );
ConversionTable.Add( typeof( Dolphin ) );
ConversionTable.Add( typeof( Gaman ) );
ConversionTable.Add( typeof( GiantToad ) );
ConversionTable.Add( typeof( Goat ) );
ConversionTable.Add( typeof( Gorilla ) );
ConversionTable.Add( typeof( GreatHart ) );
ConversionTable.Add( typeof( Hind ) );
ConversionTable.Add( typeof( Llama ) );
ConversionTable.Add( typeof( MountainGoat ) );
ConversionTable.Add( typeof( PackHorse ) );
ConversionTable.Add( typeof( PackLlama ) );
ConversionTable.Add( typeof( Pig ) );
ConversionTable.Add( typeof( Sheep ) );
ConversionTable.Add( typeof( Walrus ) );
// Animals Mounts
ConversionTable.Add( typeof( Beetle ) );
ConversionTable.Add( typeof( DesertOstard ) );
ConversionTable.Add( typeof( FireSteed ) );
ConversionTable.Add( typeof( ForestOstard ) );
ConversionTable.Add( typeof( HellSteed ) );
ConversionTable.Add( typeof( Hiryu ) );
ConversionTable.Add( typeof( Horse ) );
ConversionTable.Add( typeof( Kirin ) );
ConversionTable.Add( typeof( LesserHiryu ) );
ConversionTable.Add( typeof( RidableLlama ) );
ConversionTable.Add( typeof( Ridgeback ) );
ConversionTable.Add( typeof( SavageRidgeback ) );
ConversionTable.Add( typeof( ScaledSwampDragon ) );
ConversionTable.Add( typeof( SeaHorse ) );
ConversionTable.Add( typeof( SilverSteed ) );
ConversionTable.Add( typeof( SkeletalMount ) );
ConversionTable.Add( typeof( SwampDragon ) );
ConversionTable.Add( typeof( Unicorn ) );
// Animals Mounts War Horses
//ConversionTable.Add( typeof( CoMWarHorse ) );
//ConversionTable.Add( typeof( MinaxWarHorse ) );
//ConversionTable.Add( typeof( SLWarHorse ) );
//ConversionTable.Add( typeof( TBWarHorse ) );
// Animals Reptiles
ConversionTable.Add( typeof( Alligator ) );
ConversionTable.Add( typeof( GiantSerpent ) );
ConversionTable.Add( typeof( IceSerpent ) );
ConversionTable.Add( typeof( IceSnake ) );
ConversionTable.Add( typeof( LavaLizard ) );
ConversionTable.Add( typeof( LavaSerpent ) );
ConversionTable.Add( typeof( LavaSnake ) );
ConversionTable.Add( typeof( SilverSerpent ) );
ConversionTable.Add( typeof( Snake ) );
// Animals Rodents
ConversionTable.Add( typeof( GiantRat ) );
ConversionTable.Add( typeof( JackRabbit ) );
ConversionTable.Add( typeof( Rabbit ) );
ConversionTable.Add( typeof( Sewerrat ) );
// Animals Slimes
ConversionTable.Add( typeof( Jwilson ) );
// Animals Town Critters
ConversionTable.Add( typeof( Bird ) );
ConversionTable.Add( typeof( Cat ) );
ConversionTable.Add( typeof( Dog ) );
ConversionTable.Add( typeof( Rat ) );
#endregion
          
#region Special
ConversionTable.Add( typeof( Barracoon ) );
//ConversionTable.Add( typeof( ChaosGuard ) );
ConversionTable.Add( typeof( Harrower ) );
ConversionTable.Add( typeof( HarrowerTentacles ) );
ConversionTable.Add( typeof( LordOaks ) );
ConversionTable.Add( typeof( Mephitis ) );
ConversionTable.Add( typeof( Neira ) );
//ConversionTable.Add( typeof( OrderGuard ) );
ConversionTable.Add( typeof( Rikktor ) );
ConversionTable.Add( typeof( Semidar ) );
ConversionTable.Add( typeof( Serado ) );
ConversionTable.Add( typeof( ServantOfSemidar ) );
ConversionTable.Add( typeof( Silvani ) );

3. Now you'll need to also open up your OrbServer.cs within Visual Studio. You will be adding an argument to the "ChannelServices.RegisterChannel(chan);" line. It will look like this:
OrbServer.cs ChannelServices:
public static void Run(object o)
{
try{
Console.WriteLine("\n{0} {1} is listening on port {2}", SERVER_NAME, SERVER_VERSION, SERVER_PORT);
// Create Tcp channel using the selected Port number
TcpChannel chan = new TcpChannel(SERVER_PORT);
ChannelServices.RegisterChannel(chan, true); //register channel

4. Build your solution and cross your fingers that no errors come up. Launch your ServUO.exe and cross your fingers even harder. If the build does not work, then your problem is likely either with the previous steps regarding references, commenting, or changing lines. If the build works but your server console is a big wall of red text on startup, then your Assemblies.cfg isn't set up correctly and needs another look.
______________________________________________________________________________________________________

If you also need a little help with the Client side, read this section:

1. Firstly, let's make sure that your UOArchitect is pointed at something that it can use without getting in anything else's way. To do that, first we will make a clean copy of the UO Client folder of your choice. If you are using the default client installation, that will be located in your "C:\Games\Electronic Arts\Ultima Online Classic" directory. Either way, located your client folder and make a copy of it. Place that copy wherever you like and consider renaming it so that you know what it is (I named mine UOArchitectClient). Open your UOArchitect Client folder that you extracted earlier and open "UO Architect.xml" with your preferred text editor. Where it says, "<clientDirectory>C:\GAMES\ELECTRONIC ARTS\ULTIMA ONLINE CLASSIC</clientDirectory>, replace the directory with that of your new client folder that you've made specifically for UOArchitect to use. Save and close this file.

2. Right click on "UO Architect.exe" and go to Properties. In the Compatibility tab, check the box for "Run this program as an administrator", then click OK.

3. Launch UO Architect and click at the top where it says "Connect". Add a new connection, naming it whatever you want and giving it the proper IP Address. The default port for this application is 2594, and the User Name is whatever you login to your server with normally. Click "Save", and provided your server is currently running, click on the new Server Listing entry that you just made and fill in the password. Click connect and hope that you don't get any errors! You may need to port forward 2594-2595 on your remote server.

4. If your button which previously said "Connect" at the top now says "Disconnect", then you're good to go. Feel free to hit File->New Design, or explore the default designs that came with the program. Note: When in the Editor, you must hold down shift in order to move the camera around.
______________________________________________________________________________________________________

That should do it; those are all of the steps I took in order to get UO Architect running properly on both ServUO release 57 as well as current. Hope this helps everybody else who stumbles on this thread while searching for answers!
 

tesh

Silver Supporter
Brilliant! but i got so far and now i'm stuck. I got so many problems but worked though. If anyone is getting this error:
Errors:
+ obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs:
CS0579: Line 4: Duplicate 'global::System.Runtime.Versioning.TargetFrameworkAttribute' attribute
Scripts: One or more scripts failed to compile or no script files were found.

You have to remove all the obj folders that are in the servuo folder (I searched the folder for all instances).

Then I got: Client: 184.145.107.228: Encrypted Client Unsupported

So I did something Milva recommended years ago and changed the port to 2594 <-- overlooked this as it was in the directions. Then I opened the ports from 2594 - 2595 on my host server.

So the issue I'm having now is when I try to connect it just freezes (UO Arch). The server listens on port 2593 but it has no activity on port 2594 even though I have the message "UO arc is listening on port 2594" I've found others with the same problem but no one has posted their solution.
 
Last edited:

HellRazor

Citizen
3. Now you'll need to also open up your OrbServer.cs within Visual Studio. You will be adding an argument to the "ChannelServices.RegisterChannel(chan);" line. It will look like this:

ChannelServices.RegisterChannel(chan, true); //register channel

FYI, this edit resulted in UO Architect locking up and going unresponsive when trying to connect to the server. After I reverted it back to "ChannelServices.RegisterChannel(chan);" it was then able to connect. This was with the most current version of ServUO on Github.