Fireball

Member
Tools you will need...
Pandora's Box
UO Architect
UO Fiddler
Mulpatcher or I think there is a MUL exporter plug-in for UO Fiddler but I have not tried that.


Create a building using manual placement of static objects in GreenAcres and also the very useful tool Pandora's Box. Save the building regularly using UO Architect because there is no "undo" button and sometimes you can't find the bit you just mis-placed :) Also server [save regularly so that you can just do a non-saving restart when you screw up big time! If you have a programmable keyboard or mouse then you can set up commands for often repeated tasks. Or you can create macros for them in Razor. For example I often find I have to move an object one tile north or south. You can do that by changing the properties of the item, or you can just use "[inc y 1" for example to move the item one tile to the south. So + or - x, y or z co-ordinates. You can also move whole areas like this using the [area command which gives you a target cursor to select the top left and bottom right bounds of the area. For example "[area inc x 1 y -1 z 1" moves everything in the area you selected one tile East, 1 tile North and one notch up in height. You can even add conditionals for things like the item ID to this:
[area inc y 1 where itemid == 489

Please note that your floors must have a Z increase of at least 20 between levels. So the ground is z=0. The steps add 6, I believe so the (oh dear here comes my English heritage!) ground floor or what Americans would call the 1st floor will all be created at z=6. Then the next floor up which us Brits would call the 1st floor but Americans call the second floor <grin> would be at z=26 at least. Then z=46 for the next floor up and so on. If you don't do this, your doors will not fit (or work) properly and your head will bump into things preventing you from moving.

When your building is complete, save it to UO Architect. You do this by selecting the bounds of the area and the bottom level (usually zero) and the top level which is the highest point of your building. You probably want to click the "foundation" check box for most houses. Use the "Export" function in UO Architect for this, giving the building a type and name. A little confusing but you are exporting from your shard into the UO Architect database. Anyway, I use type as the material the building is made from like Stone, Marble, Wood etc. It helps to keep them grouped. Now export the building from UO Architect as a UOA file for permanent record. You could use this with Knives Town Houses if you wanted to at some point as UOA will place these for you anywhere but there are issues with this, for example circle of transparency doesn't work on these buildings. Now go back to your shard and remove all the doors and the house sign from your new building. The sign hanger needs to stay. Now go back to UO Architect and re-import (export from RunUO) the altered building with a new name like "MarbleDeed" to distinguish it from the house with the doors in place. Now export it from UO Architect into a text file "MarbleDeed.txt" and this should go into the UO Fiddler save folder. Best to keep all this in one place.

You CAN patch the Multi.mul using UO Architect but it will just use the first empty slot - it won't let you choose which slot to use. And the first empty slot will be the first one after the boats so probably not a good plan. So run up Mulpatcher now, and import the existing Multi.mul on the Settings tab and I think Art.mul is required also. Go to the Multi tab and ensure that "all slots" are visible. You can see the buildings in thereby clicking on the hex number on the left. Red ones are empty slots. Choose which red slot you want and right click on it and select "Load from UOA text file" and browse to the saved building text file you exported earlier. You should see the building appear in the window. Make a note of this hex number because you will need it later in the Houses.cs script. Now go back to the Settings tab and click the save button. Save Multi.idx to the Fiddler work folder and then it will prompt you for the Multi.mul which goes in the same place.
Copy the Multi.mul and .idx to your server's client folder and also your local client folder.

The next step is to create a cliloc number with the name of your building. This is the localised phrase that is the name for each item or action. Use UO Fiddler for this. Set your client file location (in Settings) and load in the files. We are only interested in the cliloc file for the english language cliloc.enu. This is a bit of a fiddly process and you have to click in the path window twice as it doesn't seem to load all filenames first time. Then click Reload Files. Now go to the cliloc tab and find an empty cliloc number. I used the 1041540 range as it is reasonably close to the existing house names etc. In the text field enter the text for the house name. For example my first house is "Larger Marble house", then the deed name in the next slot "a deed to a larger marble house" and then the next one you can type in a load of blurb describing the house which appears on the house placement tool if you are using that. Personally I am just using a deed. Make a note of the cliloc numbers you used because you will need this next in the Deeds.sc script.

Next edit the Deeds.cs script and copy one of the sections. For me it was easy because my larger marble is the same as the marble house with patio so I copied that and changed the names to "LargerMarbleDeed" and "LargerMarbleHouse" where appropriate in your copied section.

Now set the hex file position number from earlier (mine is 0x97) and the x, y and z co-ordinates of your steps in relation to the centre of the house (the place you target to place the house) here:
Code:
[Constructable]
public LargerMarbleDeed() : base( 0x97, new Point3D( -4, 7, 0 ) )
replace the "0x97" with the hexadecimal number representing the file position you chose earlier.

A little further down put in the cliloc number for the deed name in here:
Code:
public override int LabelNumber{ get{ return 1041581; } }

Don't forget to change all references to the house name. Here is the section of the deed.cs file for my larger marble house:
Code:
 public class LargerMarbleDeed : HouseDeed
{
[Constructable]
public LargerMarbleDeed() : base( 0x97, new Point3D( -4, 7, 0 ) )
{
}
public LargerMarbleDeed( Serial serial ) : base( serial )
{
}
public override BaseHouse GetHouse( Mobile owner )
{
return new LargerMarbleHouse( owner );
}
public override int LabelNumber{ get{ return 1041581; } }
public override Rectangle2D[] Area{ get{ return LargerMarbleHouse.AreaArray; } }
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}

Save your deed.cs file.

You now need to edit the houses.cs file to add the house and locate doors. Again, I suggest you copy and paste the code for a house that is close in structure to your own and edit that. For me it was easy for my first house because it has the same footprint as the large marble patio.

The first section defines the shape and size of the building, as usual from the centre point in rectangles. So -x left from centre, -y back. This is the back left corner of your house. The next two numbers are the width and depth of the house. The last Rectangle statement is the steps. In houses that are complex shapes you will have multiple rectangles. An L shape has two for example, plus the steps.

Code:
 public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 15, 14 ), new Rectangle2D( -6, 7, 6, 1 ) };

Next, for DefaultPrice enter the normal buying price of your house in gold.

BaseBanLocation is the x, y, z coordinates of the place that banned players are dumped out to. Thius is usually under the sign but you can choose somewhere else.

Code:
public LargerMarbleHouse( Mobile owner ) : base( 0x97, owner, 1450, 11 )

That needs changing with the house name, the hex entry number for the building in the multi.mul filel (same as earlier, mine is 0x97) and then the next two numbers are the maximum allowed lockdowns and secure containers for the house.

Code:
AddSouthDoors( false, -4, 3, 4, keyValue );

False for metal door true for wood door. The door location is measured from the house centre point again. If you just have outer doors this is easy. Just follow the code from your copied house and change the X, Y and Z co-ordinates to match the central position of your doors. South opening doors are easy because all the code is already there. Note that the other doors are a bit confusing. In some places they call them south doors and in others west doors :) Actually very confusing, but a pair of south doors have a West door and an East door. You will at some point work out that central to the underlying descriptions is that facing for an individual door (not pair) usually refers to the end of the door that the hinge is on, so DoorFacing East has the hinge at the east with the handle end of the door pointing out West from that. You then decide if you want the door to swing open clockwise (CW) or counter-clockwise (anti-clockwise to us Brits!) which is CCW. You don't really need to worry about this unless you are using internal doors. Then it gets a lot messier because they are not lockable by default.

You can put "true" instead of keyValue to make the doors open the other way (inwards), but sadly the author never thought to allow you to have a door open inwards AND be lockable! Also any lockable doors you make here will all have the same key/lock. I am currently looking at re-writing this to also allow iron keys for internal doors with they key type stored in the door [props so that changing the locks makes the right type of key and a different key for each lock.

Finally, change the x, y, z position of the house sign to match up with your sign hanger.

You can play with ConvertOffsetY to adjust the reference point for your house to trim problems with placement targeting and doors.

Code:
AddSouthDoors( false, -4, 3, 4, keyValue );
false for metal door true for wood door then x, y, z.

Save the houses.cs file.

Also of note is that by default the pairs of doors are always linked. Why? This is terrible house security! So you will need to comment out a couple of lines in BaseHouse.cs:
// westDoor.Link = eastDoor;
// eastDoor.Link = westDoor;
and those two lines repeat a little further down that script so comment them out too.
Now save and run your shard to test adding the deed and placing the house.
Save your changes to BaseHouse.cs

Note that when you place your house it will have no doors on the target cursor. But they will be created when you click. I suspect that I will need to put the doors back in UO Architect but delete them as the deed is placed and before the new doors are created.

Restart your shard now to see the changes. Note you will probably need to shut down the shard before copying the multi.mul and cliloc files or you will get an access denied error because these files are opened by your client and by RunUO/ServUO.

FB.
 
Last edited:
Wow! this is fantastic. I learned something from this. Many thanks Fireball!
 
Wow thank you. I do think it is important to share this kind of information so that we can all improve the fun for others. I just wish that all devs felt the same.

I've still not got this to work with the latest client though sadly. And I just don't have the time to work it out and write a proper converter/importer.
 
Ahh I see, I just now saw your post about this no longer working with the new client. I've spent the past 3-4 days working on a custom house deed. And I just reached the point where I'm trying to save the UOA text file with Mulpatcher. And I seem to have hit a wall. I assume this is the point in the process that I will be able to go no further due to not being able to properly convert and import?
 
Well I'm using client 7.0.31.0 and that works fine but you have to use UO Fiddler to import the house file as mulpatcher no longer works.

I understand that the last client this works with is 7.0.34.x but I can't find that anywhere. I want that client because it gives you the rideable peacocks and tigers etc.

Beyond that, the multi file switches to the new format so a new file converter is needed to bring the UO Architect file into the new format multi file.
 
Just bumping this thread to ask if anyone has gotten anything like this to work on the new client. Any ideas or thoughts would be appreciated. Thanks
 
Same!
I managed to extract into UOArchitect and save text/UOA files but I am not getting any result updating on mulpatcher and UOfiddler is just not updating the files :/ I load the UOA/Text and its not showing anything/any component...

This is kinda weird because it works if I try to re-upload multis that are already in the repo
 

Active Shards

Donations

Total amount
$0.00
Goal
$1,000.00
Back