RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

[runuo 2.2] pre-t2a server package

nevdawg

Sorceror
UO:Origins Pre-T2A Server Package (May 1998)
Current Version: Public Release 1.0 (October 11, 2012)

Code:
Features:
- Pre-T2A combat system including spell damage and melee mechanics
- Tents
- Virtue (Order/Chaos) Guards
- No house security and Pre-T2A house placement rules
- Pre-T2A loot (bag based)
- Notoriety System
- Skill Atrophy
- Bounty System
- All skills work on Pre-T2A mechanics
- Pre-T2A crafting system
 
And LOTS more

This project started in 2008 with the goal of bringing an accurate Pre-T2A experience to RunUO. It started from scratch using RunUO 1.0, and was modified over time with Pre-T2A features as well as Core upgrades up to the latest SVN build. While this idea is similar to Zippy's Rebirth, the code base is completely independent from Rebirth. With the exception of the Resurrection Menu which was provided by Zippy.

Over the years, some logs of the changes I made were lost but I will post all the records I have of changes done to both the base scripts and server core. Majority the changes were verified with the assistance of the UODemo and the amazing work being done with that. All other changes came from various sources during that time frame (anything before June 1998).

There are areas of the code that can be improved but I haven't had the opportunity to go over and revise them.

Enjoy!
 

Attachments

  • changelog.txt
    6.7 KB · Views: 286
  • uoorigins-RunUO-77115d3.zip
    5.5 MB · Views: 659

alekwdrake

Sorceror
Ive been doing a mad amount of research trying to find something like this. Do I need a specific UO client to be able to run this?
Thanks again mate.
 

nevdawg

Sorceror
You can run this with any client version between 5.0.4d (possibly lower) all the way up to the latest Classic client version 7.0.27.9
 

alekwdrake

Sorceror
Thanks. Im trying to find a UO client that only has Felucca. Do you know of any. I want one that is before the intro of Trammel if possible.
 

Panthar

Sorceror
Hey there,

I played pre-t2a era, things are a little different than the t2a era that you based it on. I just wanted to mention some things that may not be obvious about this time period, maybe use to you, if your trying to recreate it.

1.)When you hide, you could talk while hidden, and were attackable if someone was in war mode by double clicking on the text.
2.)There was a bug where you could get both order and chaos shield, and a ton of people did it. The way you did it was, after you had a order shield, if you picked up the order shield while requesting the chaos shield, you could be both order and chaos.
3.)When order/chaos fights occurred, they flagged blue, and you could only attack without a guard wack if they had the opposing shield equipped.
4.)NPC's would not talk to you unless your notoriety was above "dasterdly"
5.)House keys could always be copied with tinkering skill, and you started with 2 master keys. Also logging out inside a house, meant you could log back into the house. This prompted people to make houses with tents around the front area, to prevent people/theifs from running into their house.
6.)PK's with energy vortex, and tamed animals, halberds, and heavy crossbows.
7.)You could pk people in houses with EQ
8.)Vendors started with 10 of each item, and every time the vendor restocked, the value would increase if it has been purchased.
9.)You could increase your notoriety by giving a NPC 1 gp per 15 minutes.
10.)You could trap animals in your house.
11.)There was no item limit to house
12.)Garbage cans did not exist yet
13.)Bank could have unlimited gold, but was limited to 400 stones or 125 items, as was every other container.
14.)Black dye tub did not exist.
15.)Moongates took you randomly to a city, no gump involved.
16.)Bankers/healers did not deal with anyone lower than dasterly notoriety.
17.)Tinker traps did not effect your notoriety, and did not prompt guards.
 

alekwdrake

Sorceror
I made an edit to publicmoongates.cs and got this error. Is it becausethe moongates dont show Trammel is your server? I havnt actually looked lol sorry. Made the edit to get rid of Trammel on the moongates assuming they would show up because I could go to Trammel within my client by using the [go Trammel command.

Im using UO Second Age Client 5.0.8.3 (would like to find one in the 4's but have been unsuccessful)

And here is the error I got:

RunUO - [www.runuo.com] Version 2.1 , Build 4666.305
Core: Running on .NET Framework Version 4.0.30319
Core: Optimizing for 3 64-bit processors
Scripts: Compiling C# scripts...failed (1 errors, 0 warnings
Errors:
+ Items/Misc/PublicMoongates.cs:
CS0116: Line 468: A namespace cannot directly contain members such as fields or methods
Scripts: One or more scripts failed to compile or no scripts were found.
-Press return to exit or R to try again
Here is the copy of my script publicmoongates.cs

the loop.. here is an quick edit i made to the public moongate for doing so...

publicmoongate.cs
Code:
using System;
using System.Collections.Generic;
using Server;
using Server.Commands;
using Server.Gumps;
using Server.Mobiles;
using Server.Network;
using Server.Spells;

namespace Server.Items
{
public class PublicMoongate : Item
{
public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } }

[Constructable]
public PublicMoongate() : base( 0xF6C )
{
Movable = false;
Light = LightType.Circle300;
}

public PublicMoongate( Serial serial ) : base( serial )
{
}

public override void OnDoubleClick( Mobile from )
{
if ( !from.Player )
return;

if ( from.InRange( GetWorldLocation(), 1 ) )
UseGate( from );
else
from.SendLocalizedMessage( 500446 ); // That is too far away.
}

public override bool OnMoveOver( Mobile m )
{
// Changed so criminals are not blocked by it.
if ( m.Player )
UseGate( m );

return true;
}

public override bool HandlesOnMovement{ get{ return true; } }

public override void OnMovement( Mobile m, Point3D oldLocation )
{
if ( m is PlayerMobile )
{
if ( !Utility.InRange( m.Location, this.Location, 1 ) && Utility.InRange( oldLocation, this.Location, 1 ) )
m.CloseGump( typeof( MoongateGump ) );
}
}

public bool UseGate( Mobile m )
{
if ( m.Criminal )
{
m.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
return false;
}
else if ( SpellHelper.CheckCombat( m ) )
{
m.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
return false;
}
else if ( m.Spell != null )
{
m.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
return false;
}
else
{
m.CloseGump( typeof( MoongateGump ) );
m.SendGump( new MoongateGump( m, this ) );

if ( !m.Hidden || m.AccessLevel == AccessLevel.Player )
Effects.PlaySound( m.Location, m.Map, 0x20E );

return true;
}
}

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();
}

public static void Initialize()
{
CommandSystem.Register( "MoonGen", AccessLevel.Administrator, new CommandEventHandler( MoonGen_OnCommand ) );
}

[Usage( "MoonGen" )]
[Description( "Generates public moongates. Removes all old moongates." )]
public static void MoonGen_OnCommand( CommandEventArgs e )
{
DeleteAll();

int count = 0;

//count += MoonGen( PMList.Trammel );
count += MoonGen( PMList.Felucca );
count += MoonGen( PMList.Ilshenar );
count += MoonGen( PMList.Malas );
count += MoonGen( PMList.Tokuno );

World.Broadcast( 0x35, true, "{0} moongates generated.", count );
}

private static void DeleteAll()
{
List<Item> list = new List<Item>();

foreach ( Item item in World.Items.Values )
{
if ( item is PublicMoongate )
list.Add( item );
}

foreach ( Item item in list )
item.Delete();

if ( list.Count > 0 )
World.Broadcast( 0x35, true, "{0} moongates removed.", list.Count );
}

private static int MoonGen( PMList list )
{
foreach ( PMEntry entry in list.Entries )
{
Item item = new PublicMoongate();

item.MoveToWorld( entry.Location, list.Map );

if ( entry.Number == 1060642 ) // Umbra
item.Hue = 0x497;
}

return list.Entries.Length;
}
}

public class PMEntry
{
private Point3D m_Location;
private int m_Number;

public Point3D Location
{
get
{
return m_Location;
}
}

public int Number
{
get
{
return m_Number;
}
}

public PMEntry( Point3D loc, int number )
{
m_Location = loc;
m_Number = number;
}
}

public class PMList
{
private int m_Number, m_SelNumber;
private Map m_Map;
private PMEntry[] m_Entries;

public int Number
{
get
{
return m_Number;
}
}

public int SelNumber
{
get
{
return m_SelNumber;
}
}

public Map Map
{
get
{
return m_Map;
}
}

public PMEntry[] Entries
{
get
{
return m_Entries;
}
}

public PMList( int number, int selNumber, Map map, PMEntry[] entries )
{
m_Number = number;
m_SelNumber = selNumber;
m_Map = map;
m_Entries = entries;
}

/*public static readonly PMList Trammel =
new PMList( 1012000, 1012012, Map.Trammel, new PMEntry[]
{
new PMEntry( new Point3D( 4467, 1283, 5 ), 1012003 ), // Moonglow
new PMEntry( new Point3D( 1336, 1997, 5 ), 1012004 ), // Britain
new PMEntry( new Point3D( 1499, 3771, 5 ), 1012005 ), // Jhelom
new PMEntry( new Point3D( 771, 752, 5 ), 1012006 ), // Yew
new PMEntry( new Point3D( 2701, 692, 5 ), 1012007 ), // Minoc
new PMEntry( new Point3D( 1828, 2948,-20), 1012008 ), // Trinsic
new PMEntry( new Point3D( 643, 2067, 5 ), 1012009 ), // Skara Brae
new PMEntry( new Point3D( 3563, 2139, 34), 1012010 ), // Magincia
new PMEntry( new Point3D( 3450, 2677, 25), 1078098 ) // New Haven
} );*/

public static readonly PMList Felucca =
new PMList( 1012001, 1012013, Map.Felucca, new PMEntry[]
{
new PMEntry( new Point3D( 4467, 1283, 5 ), 1012003 ), // Moonglow
new PMEntry( new Point3D( 1336, 1997, 5 ), 1012004 ), // Britain
new PMEntry( new Point3D( 1499, 3771, 5 ), 1012005 ), // Jhelom
new PMEntry( new Point3D( 771, 752, 5 ), 1012006 ), // Yew
new PMEntry( new Point3D( 2701, 692, 5 ), 1012007 ), // Minoc
new PMEntry( new Point3D( 1828, 2948,-20), 1012008 ), // Trinsic
new PMEntry( new Point3D( 643, 2067, 5 ), 1012009 ), // Skara Brae
new PMEntry( new Point3D( 3563, 2139, 34), 1012010 ), // Magincia
new PMEntry( new Point3D( 2711, 2234, 0 ), 1019001 ) // Buccaneer's Den
} );

public static readonly PMList Ilshenar =
new PMList( 1012002, 1012014, Map.Ilshenar, new PMEntry[]
{
new PMEntry( new Point3D( 1215, 467, -13 ), 1012015 ), // Compassion
new PMEntry( new Point3D( 722, 1366, -60 ), 1012016 ), // Honesty
new PMEntry( new Point3D( 744, 724, -28 ), 1012017 ), // Honor
new PMEntry( new Point3D( 281, 1016, 0 ), 1012018 ), // Humility
new PMEntry( new Point3D( 987, 1011, -32 ), 1012019 ), // Justice
new PMEntry( new Point3D( 1174, 1286, -30 ), 1012020 ), // Sacrifice
new PMEntry( new Point3D( 1532, 1340, - 3 ), 1012021 ), // Spirituality
new PMEntry( new Point3D( 528, 216, -45 ), 1012022 ), // Valor
new PMEntry( new Point3D( 1721, 218, 96 ), 1019000 ) // Chaos
} );

public static readonly PMList Malas =
new PMList( 1060643, 1062039, Map.Malas, new PMEntry[]
{
new PMEntry( new Point3D( 1015, 527, -65 ), 1060641 ), // Luna
new PMEntry( new Point3D( 1997, 1386, -85 ), 1060642 ) // Umbra
} );

public static readonly PMList Tokuno =
new PMList( 1063258, 1063415, Map.Tokuno, new PMEntry[]
{
new PMEntry( new Point3D( 1169, 998, 41 ), 1063412 ), // Isamu-Jima
new PMEntry( new Point3D( 802, 1204, 25 ), 1063413 ), // Makoto-Jima
new PMEntry( new Point3D( 270, 628, 15 ), 1063414 ) // Homare-Jima
} );

public static readonly PMList[] UORLists = new PMList[] { /*Trammel,*/ Felucca };
public static readonly PMList[] UORListsYoung = new PMList[] { /*Trammel*/ Felucca };
public static readonly PMList[] LBRLists = new PMList[] { /*Trammel,*/ Felucca, Ilshenar };
public static readonly PMList[] LBRListsYoung = new PMList[] { /*Trammel,*/ Ilshenar };
public static readonly PMList[] AOSLists = new PMList[] { /*Trammel,*/ Felucca, Ilshenar, Malas };
public static readonly PMList[] AOSListsYoung = new PMList[] { /*Trammel,*/ Ilshenar, Malas };
public static readonly PMList[] SELists = new PMList[] { /*Trammel,*/ Felucca, Ilshenar, Malas, Tokuno };
public static readonly PMList[] SEListsYoung = new PMList[] { /*Trammel,*/ Ilshenar, Malas, Tokuno };
public static readonly PMList[] RedLists = new PMList[] { Felucca };
public static readonly PMList[] SigilLists = new PMList[] { Felucca };
}

public class MoongateGump : Gump
{
private Mobile m_Mobile;
private Item m_Moongate;
private PMList[] m_Lists;

public MoongateGump( Mobile mobile, Item moongate ) : base( 100, 100 )
{
m_Mobile = mobile;
m_Moongate = moongate;

PMList[] checkLists;

if ( mobile.Player )
{
if ( Factions.Sigil.ExistsOn( mobile ) )
{
checkLists = PMList.SigilLists;
}
else if ( mobile.Kills >= 5 )
{
checkLists = PMList.RedLists;
}
else
{
ClientFlags flags = mobile.NetState == null ? ClientFlags.None : mobile.NetState.Flags;
bool young = mobile is PlayerMobile ? ((PlayerMobile)mobile).Young : false;

if ( Core.SE && (flags & ClientFlags.Tokuno) != 0 )
checkLists = young ? PMList.SEListsYoung : PMList.SELists;
else if ( Core.AOS && (flags & ClientFlags.Malas) != 0 )
checkLists = young ? PMList.AOSListsYoung : PMList.AOSLists;
else if ( (flags & ClientFlags.Ilshenar) != 0 )
checkLists = young ? PMList.LBRListsYoung : PMList.LBRLists;
else
checkLists = young ? PMList.UORListsYoung : PMList.UORLists;
}
}
else
{
checkLists = PMList.SELists;
}

m_Lists = new PMList[checkLists.Length];

for ( int i = 0; i < m_Lists.Length; ++i )
m_Lists = checkLists;

for ( int i = 0; i < m_Lists.Length; ++i )
{
if ( m_Lists.Map == mobile.Map )
{
PMList temp = m_Lists;

m_Lists = m_Lists[0];
m_Lists[0] = temp;

break;
}
}

AddPage( 0 );

AddBackground( 0, 0, 380, 280, 5054 );

AddButton( 10, 210, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 210, 140, 25, 1011036, false, false ); // OKAY

AddButton( 10, 235, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 235, 140, 25, 1011012, false, false ); // CANCEL

AddHtmlLocalized( 5, 5, 200, 20, 1012011, false, false ); // Pick your destination:

for ( int i = 0; i < checkLists.Length; ++i )
{
AddButton( 10, 35 + (i * 25), 2117, 2118, 0, GumpButtonType.Page, Array.IndexOf( m_Lists, checkLists ) + 1 );
AddHtmlLocalized( 30, 35 + (i * 25), 150, 20, checkLists.Number, false, false );
}

for ( int i = 0; i < m_Lists.Length; ++i )
RenderPage( i, Array.IndexOf( checkLists, m_Lists ) );
}

private void RenderPage( int index, int offset )
{
PMList list = m_Lists[index];

AddPage( index + 1 );

AddButton( 10, 35 + (offset * 25), 2117, 2118, 0, GumpButtonType.Page, index + 1 );
AddHtmlLocalized( 30, 35 + (offset * 25), 150, 20, list.SelNumber, false, false );

PMEntry[] entries = list.Entries;

for ( int i = 0; i < entries.Length; ++i )
{
AddRadio( 200, 35 + (i * 25), 210, 211, false, (index * 100) + i );
AddHtmlLocalized( 225, 35 + (i * 25), 150, 20, entries.Number, false, false );
}
}

public override void OnResponse( NetState state, RelayInfo info )
{
if ( info.ButtonID == 0 ) // Cancel
return;
else if ( m_Mobile.Deleted || m_Moongate.Deleted || m_Mobile.Map == null )
return;

int[] switches = info.Switches;

if ( switches.Length == 0 )
return;

int switchID = switches[0];
int listIndex = switchID / 100;
int listEntry = switchID % 100;

if ( listIndex < 0 || listIndex >= m_Lists.Length )
return;

PMList list = m_Lists[listIndex];

if ( listEntry < 0 || listEntry >= list.Entries.Length )
return;

PMEntry entry = list.Entries[listEntry];

if ( !m_Mobile.InRange( m_Moongate.GetWorldLocation(), 1 ) || m_Mobile.Map != m_Moongate.Map )
{
m_Mobile.SendLocalizedMessage( 1019002 ); // You are too far away to use the gate.
}
else if ( m_Mobile.Player && m_Mobile.Kills >= 5 && list.Map != Map.Felucca )
{
m_Mobile.SendLocalizedMessage( 1019004 ); // You are not allowed to travel there.
}
else if ( Factions.Sigil.ExistsOn( m_Mobile ) && list.Map != Factions.Faction.Facet )
{
m_Mobile.SendLocalizedMessage( 1019004 ); // You are not allowed to travel there.
}
else if ( m_Mobile.Criminal )
{
m_Mobile.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
}
else if ( SpellHelper.CheckCombat( m_Mobile ) )
{
m_Mobile.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
}
else if ( m_Mobile.Spell != null )
{
m_Mobile.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
}
else if ( m_Mobile.Map == list.Map && m_Mobile.InRange( entry.Location, 1 ) )
{
m_Mobile.SendLocalizedMessage( 1019003 ); // You are already there.
}
else
{
BaseCreature.TeleportPets( m_Mobile, entry.Location, list.Map );

m_Mobile.Combatant = null;
m_Mobile.Warmode = false;
m_Mobile.Hidden = true;

m_Mobile.MoveToWorld( entry.Location, list.Map );

Effects.PlaySound( entry.Location, list.Map, 0x1FE );
}
}
}
 

alekwdrake

Sorceror
Also I like most of the things you listed except:

12.)Garbage cans did not exist yet
14.)Black dye tub did not exist.
15.)Moongates took you randomly to a city, no gump involved.

Am I able to add those things and also make the moongates only show Felucca and not go to random loacations.
 

alekwdrake

Sorceror
So I went to the location where brit moongate would be, then I [add publicmoongate one there and like you said it takes me to random locations. Sorry to say but despite wanting an old style shard I cant deal with that lol. And I doubt many people will want that who would come to play on my server. I applaud your hard work though as I know that I would have loved to have the credit for doing what you did in creating a server that was so close to the original Ultima Online. I want to keep it as close to the original UO as possible but with a few add features that it didnt just to improve it a little bit. Like being able to breed pets and numbers 12,14 and 15 on your list if you would tell me a way to. On the moongates I was hoping it was as easy as twitching over the script from a newer RunUO server and that would fix it but no dice so far. Not sure what Im doing wrong.

As far as that goes I dont think of anything else Id change. I want house keys and having to lock your doors and being able to get PK'd in your home so you already adding that saved me a ton of work.
 

alekwdrake

Sorceror
Sorry for posting so many times. I just have alot of question. Which version of Neruns Distro should I use. If you know. Just trying to get a decent admin gump at the top of my screen. Was thinking this was contained within the distro.
 

danatar

Sorceror
You don't need Neruns Distro to spawn the shard. The spawns come with the package.

Just type "[XmlImportMap Data/Monsters" and it should load everything for you. Although you may want to go to the data/monsters folder and delete everything except the file "classic.map", otherwise you will end up with spawns in Trammel, Illshenar, Tokuno, Malas etc..

As far as your moongate.cs error, I believe you are missing a bracket at the end of the script add one more "}" at the bottom.
 

alekwdrake

Sorceror
k thanks. Also how do you interact with the NPC's. I click on them and it only displayes the name. Usually there is a buy option above them after you do that but since this is an older version I was assuming a keyword was used but vendor buy didnt work either so I dont really know now.
 

danatar

Sorceror
k thanks. Also how do you interact with the NPC's. I click on them and it only displayes the name. Usually there is a buy option above them after you do that but since this is an older version I was assuming a keyword was used but vendor buy didnt work either so I dont really know now.

The context menus for NPC's did not exist during the time period of this package, so they are disabled. To buy or sell type "vendor buy", or "vendor sell".
I'm not quite sure how to enable the context menus, I assume it can be changed in basevendor.cs or in the core.
 

Khan101

Wanderer
You don't need Neruns Distro to spawn the shard. The spawns come with the package.

Just type "[XmlImportMap Data/Monsters" and it should load everything for you. Although you may want to go to the data/monsters folder and delete everything except the file "classic.map", otherwise you will end up with spawns in Trammel, Illshenar, Tokuno, Malas etc..

As far as your moongate.cs error, I believe you are missing a bracket at the end of the script add one more "}" at the bottom.
Hi i just want to say that this is a great idea but i do have one question when i use "[XmlImportMap Data/Monsters" it seems to spawn 2 of everything making a very heavy spawn. 2 spawners spawn on top of each other is there a way to fix this or am i doing something wrong ????
 

mehoo

Sorceror
Hi i just want to say that this is a great idea but i do have one question when i use "[XmlImportMap Data/Monsters" it seems to spawn 2 of everything making a very heavy spawn. 2 spawners spawn on top of each other is there a way to fix this or am i doing something wrong ????

I had that problem too. All I had to do was delete everything in the Data/Monsters folder, except for the classic.map file (which I put in its own folder "Data/Monsters/A"). If that doesn't fix it, I don't know what could be going wrong.
 

nevdawg

Sorceror
Hey there,

I played pre-t2a era, things are a little different than the t2a era that you based it on. I just wanted to mention some things that may not be obvious about this time period, maybe use to you, if your trying to recreate it.

1.)When you hide, you could talk while hidden, and were attackable if someone was in war mode by double clicking on the text.
2.)There was a bug where you could get both order and chaos shield, and a ton of people did it. The way you did it was, after you had a order shield, if you picked up the order shield while requesting the chaos shield, you could be both order and chaos.
3.)When order/chaos fights occurred, they flagged blue, and you could only attack without a guard wack if they had the opposing shield equipped.
4.)NPC's would not talk to you unless your notoriety was above "dasterdly"
5.)House keys could always be copied with tinkering skill, and you started with 2 master keys. Also logging out inside a house, meant you could log back into the house. This prompted people to make houses with tents around the front area, to prevent people/theifs from running into their house.
6.)PK's with energy vortex, and tamed animals, halberds, and heavy crossbows.
7.)You could pk people in houses with EQ
8.)Vendors started with 10 of each item, and every time the vendor restocked, the value would increase if it has been purchased.
9.)You could increase your notoriety by giving a NPC 1 gp per 15 minutes.
10.)You could trap animals in your house.
11.)There was no item limit to house
12.)Garbage cans did not exist yet
13.)Bank could have unlimited gold, but was limited to 400 stones or 125 items, as was every other container.
14.)Black dye tub did not exist.
15.)Moongates took you randomly to a city, no gump involved.
16.)Bankers/healers did not deal with anyone lower than dasterly notoriety.
17.)Tinker traps did not effect your notoriety, and did not prompt guards.

I just want to point out that this package was never based on T2A, strictly a Pre-T2A feature set.

1) This was patched in April 1998 (before the May 1998 deadline that this package is based on).
3), 5), 6), 7), 8), 9), 10), 11) 12) 14), 15), are already implemented in the package

The rest are bugs/unconfirmed which are not in the package.
 

nevdawg

Sorceror
Hi i just want to say that this is a great idea but i do have one question when i use "[XmlImportMap Data/Monsters" it seems to spawn 2 of everything making a very heavy spawn. 2 spawners spawn on top of each other is there a way to fix this or am i doing something wrong ????

It's possible XMLSpawner is reading both Trammel and Felucca spawn files and putting them both in Felucca. Try using "[XmlImportMap Data/Monsters/Felucca" instead
 

Panthar

Sorceror
Sorry, I was just trying help out with things I remember from that era, since most focus is from T2A era reproductions, and this was trying to be pre-t2a! I was a very early player, in 1/98, and I remember many of the updates to skills and systems/gumps they used.

I think the thing that maybe I did not convey is, your right some of those were bugs, but bugs were a *major* element of the game early on. I can't express that enough, every damn skill basically had a simple bug to max our your skill. Item dupes, house loots, you name it. I find it hard to imagine recreating that era server without introducing some of your own "bugs" into the mix. If I was building a project like OP, I would build a "Bug engine" that every couple months introduces a new set of bugs into the game, by design, and a way to stop a bug if people start abusing it to much.
 
Is there an XMLImport command for doing the doors, signs etc as well? I've tried just pointing it at the data folder but that only picks up the spawner for the vendors and monsters.
Any help would be great cheers! Thank God you've made this, new ultima burns my eyes when I see it.
 
Top