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

Citizen
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

Vita-Nex Sponsor
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.
 

Izex

Vita-Nex Sponsor
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.
I had this exact problem and removing true at the end fixed it for me. Thank you!
 

ruaduck

Platinum Sponsor
Vita-Nex Sponsor
In your instruction #4 where you commented out:

spawner.SpawnNames.Add( t.ToString() );


Instead I changed mine to: spawner.SpawnObjects.Add(new SpawnObject(t.ToString()));
 

Murrer

Citizen
Hey guys,

I've followed the instructions, I'm able to connect and servUO server is acknowledging UOarchitect. I'm able to place a prefab castle to my server. Which is awesome but the main reason I want this to work is to use the editor, so we can create our own structures. However when I use the 'new design' or editor button I get the following message:
1644319657828.png
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Ultima.Art.GetStatic(Int32 index, Boolean& patched)
at Ultima.Art.GetStatic(Int32 index)
at UOArchitect.HouseComponent..ctor(Int32 index, Int32 z, Int32 baseIndex, Int32 count)
at UOArchitect.HouseDesign.AddComponent(Int32 x, Int32 y, Int32 z, Int32 level, Int32 index, Int32 baseIndex, Int32 count, Int32 hue)
at UOArchitect.HouseDesign.BuildFoundation()
at UOArchitect.NewDesigner.btnCreate_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4420.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
UO Architect
Assembly Version: 1.0.4321.36663
Win32 Version: 1.0.4321.36663
CodeBase: file:///C:/Users/DFC_GS_01/Downloads/uo_architect_2-7-final/Client/UO%20Architect.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4400.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4360.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4390.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4455.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
UOArchitectInterface
Assembly Version: 1.0.4296.37499
Win32 Version: 1.0.4296.37499
CodeBase: file:///C:/Users/DFC_GS_01/Downloads/uo_architect_2-7-final/Client/UOArchitectInterface.DLL
----------------------------------------
OrbServerSDK
Assembly Version: 1.0.1675.23963
Win32 Version: 1.0.1675.23963
CodeBase: file:///C:/Users/DFC_GS_01/Downloads/uo_architect_2-7-final/Client/OrbServerSDK.DLL
----------------------------------------
System.Runtime.Remoting
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
Ultima
Assembly Version: 4.3.2.0
Win32 Version: 4.3.2
CodeBase: file:///C:/Users/DFC_GS_01/Downloads/uo_architect_2-7-final/Client/Ultima.DLL
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Does anyone know what to do, what I did wrong or how to get this working? much appreciated!
 
Ultima.dll that was included in the package
It seems that the error occurred because Ultima.Art.GetStatic (Int32 index) is not included.

Ultima.Art.GetStatic (Int32 index)
I added this and tried to recompile Ultima.dll.

And now you can see the preview.
 

Attachments

  • Ultima.zip
    57.4 KB · Views: 11
  • uoar.JPG
    uoar.JPG
    84.6 KB · Views: 19

RandomGuy

Citizen
Run through this and it did the build without error after a fix from above.
Now when I try to start my server i'm getting the below errors
It seems to just be with the DarkKnightCreeper file but I'd like to keep it. Any suggestions?


Error:
[Persistance]: An error was encountered while loading a saved object
Error:
System.Exception: [Persistance]: System.InvalidCastException: Unable to cast object of type 'Server.Mobiles.DarknightCreeper' to type 'Server.Mobiles.BaseCollectionMobile'.
   at System.Linq.Enumerable.<CastIterator>d__97`1.MoveNext()
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Server.Services.Community_Collections.CollectionsSystem.<>c.<EventSink_WorldLoad>b__7_0(GenericReader reader)
   at Server.Persistence.Deserialize(FileInfo file, Action`1 deserializer, Boolean ensure)
   at Server.Persistence.Deserialize(FileInfo file, Action`1 deserializer, Boolean ensure)
   at Server.Services.Community_Collections.CollectionsSystem.EventSink_WorldLoad()
   at Server.WorldLoadEventHandler.Invoke()
   at Server.EventSink.InvokeWorldLoad()
   at Server.World.Load()
   at Server.Core.Main(String[] args)
This exception is fatal, press return to exit
 
I did all of this and it compiles fine. However, I cannot connect. It's not a port issue because I have loaded my old server, and I can connect to that no issue. What could be the issue? Anyone have ideas?
 

RandomGuy

Citizen
I did all of this and it compiles fine. However, I cannot connect. It's not a port issue because I have loaded my old server, and I can connect to that no issue. What could be the issue? Anyone have ideas?
Where he says to do this....
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

Try just adding the true boolean to the old function.
Example: ChannelServices.RegisterChannel(chan,true)l