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!

How to get a fully decorated world!

Hunter

Sorceror
How to get a fully decorated world!

I will try to explain how to get a fully decorated world.
Firstly download this www.fertilelands.net/POL-2-RunUO.zip
Its the worldfile, a .wsc file (you will see what to do with this file when you read the whole post)
Thanks to Dian that published the worldfile.
(Before using this, make sure you have a BLANK worldfile, how to get a blank worldfile some may ask, just remove the "save" folder in your RunUO folder)
**UPDATED** I have added a new script made by Dougan Ironfist, the script fix the stuff in Shame (the doors, bridges etc.)

Ok now when you have the worldfile then add this script to \Scripts\Commands (create a new file thats called ImportWSC.cs



[code:1]

using System;
using System.IO;
using System.Reflection;
using System.Collections;
using Server;
using Server.Items;
using Server.Targeting;

namespace Server.Scripts.Commands
{
/// <summary>
/// ImportWSC.cs
/// Creator: Bob Smart ([email protected])
/// Created: Jan 05, 2002
/// Description: Imports WSC items.
/// Attempts to convert items by using reflection. If a type can not be
/// determined by using reflection, then it will only be imported if it is
/// marked as TYPE 255 in the WSC file. The reason for this import script
/// is to make it easier to use an old WSC type world. The importer will
/// try to make all useable items usable rather than simple dumb items.
///
/// The following WSC items are NOT converted:
/// - Any item that is in a container
///
/// - Corpses
///
/// - Vendor signs since the [SignGen command is available
///
/// - TYPES:
/// 12 - Unlocked door
/// 13 - Locked door
/// 60 - Teleporter
/// 61 - Item spawner
/// 62 - NPC spawner
/// 63 - Item container spawner
/// 64 - Locked item container spawner
/// 65 - Unlockable item container spawner
/// 69 - Area spawner
/// </summary>
public class ImportWSC
{
public static void Initialize()
{
Server.Commands.Register( "ImportWSC", AccessLevel.Administrator, new CommandEventHandler( ImportWSC_OnCommand ) );
}

public class ImportItem
{
public string Name = null;
public int ObjectId = 0;
public int PositionX = 0;
public int PositionY = 0;
public int PositionZ = 0;
public int Colour = 0;
public int Amount = 1;
public int WscType = 255;
public bool IsValidItem = true;

public override string ToString()
{
return "New Item: " + this.Name + ":" + this.ObjectId;
}

public Item CreateItem( ConvertableItems ItemTemplateList )
{
Item NewItem = null;

// Check that the item has a valid position in the world
if( ( this.PositionX > 0 ) &&
( this.PositionY > 0 ) )
{
// Convert any know item ids that have problems to standard
this.ConvertItemId();

// Lookup the id in the item template list
ConversionItemInfo ValidItem = ItemTemplateList.FindItemById( this.ObjectId );

// Check if valid conversion item was found
if( ValidItem != null )
{
// Construct the new item based on the conversion class
// Get the default constructor for the convertible item
ConstructorInfo ci = ValidItem.ItemType.GetConstructor( Type.EmptyTypes );

// Invoke the constructor
NewItem = ci.Invoke( null ) as Item;
NewItem.ItemID = this.ObjectId;

// Check if the object created is a lockable container, if so delete the keys
if( NewItem is LockableContainer )
{
// Get the list of sub items for the container (should include the key)
ArrayList SubItems = NewItem.Items;
for( int x = 0; x < SubItems.Count; x++ )
{
// Find the key and delete it
Key TheKey = SubItems[x] as Key;
if( TheKey != null )
TheKey.Delete();
}
}
}
else
{
// Only static WSC types will be converted if a convertible object
// could not be found using reflection
if( this.WscType == 255 )
NewItem = new Item( this.ObjectId );
}

// Check if an object was created
if( NewItem != null )
{
NewItem.Name = this.Name;
NewItem.Location = new Point3D( this.PositionX, this.PositionY, this.PositionZ );
NewItem.Hue = this.Colour;
NewItem.Amount = 1;//this.Amount;
NewItem.Movable = false;
}
}

return NewItem;
}

/// <summary>
/// Converts an unhandled item id to a id that has a valid type.
/// The reason for this is that certain types may need to be a specific
/// item id in order for the conversion to work. Examples are any
/// Lamp Post since lamp posts do not have a flipable attribute and
/// therefore must have an exact match
/// </summary>
private void ConvertItemId()
{
// Handle specific item id conversions here
switch( this.ObjectId )
{
// All Lamp Posts
case 2848:
case 2850:
case 2852:
this.ObjectId++;
break;

// Candelabra
case 2845:
case 2846:
case 2847:
this.ObjectId = 0xA27;
break;

// Candelabra stand
case 2854:
case 2855:
case 2856:
this.ObjectId = 0xA29;
break;

// Brazier
case 3634:
case 3635:
this.ObjectId = 0xE31;
break;

// Candle
case 2575:
case 2576:
case 2577:
this.ObjectId = 0xA28;
break;

// Candle Large
case 2842:
case 2843:
case 2844:
this.ObjectId = 0xA26;
break;

// Candle Long
case 5168:
case 5169:
case 5170:
this.ObjectId = 0x1433;
break;

// Candle Short
case 5164:
case 5165:
case 5166:
this.ObjectId = 0x142F;
break;

// Skull Candle
case 6228:
case 6229:
case 6230:
case 6231:
case 6232:
case 6233:
case 6234:
this.ObjectId = 0x1853;
break;

// Lantern
case 2581:
case 2582:
case 2583:
case 2584:
case 2586:
case 2587:
case 2588:
case 2589:
case 2595:
case 2596:
this.ObjectId = 0xA25;
break;

// Torch
case 2578:
case 2579:
case 2580:
case 3940:
this.ObjectId = 0xF6B;
break;

// Wall Sconce 1
case 2557:
case 2558:
case 2559:
this.ObjectId = 0x9FB;
break;

// Wall Sconce 2
case 2562:
case 2563:
case 2564:
this.ObjectId = 0xA00;
break;

// Wall Torch 1
case 2567:
case 2568:
case 2569:
this.ObjectId = 0xA05;
break;

// Wall Torch 2
case 2572:
case 2573:
case 2574:
this.ObjectId = 0xA0A;
break;
}
}
}

public class ImportItemProperty
{
public static char[] Delimiters = { ' ' };
public string Name = string.Empty;
public string Value = string.Empty;

public ImportItemProperty( string WscFileLine )
{
// Convert all tabs to single spaces
string WscFileLineSpaceDelimited = WscFileLine.Replace( "\t", " " );

// Split the value into its name and value
string[] PropertyItems = WscFileLineSpaceDelimited.Split( ImportItemProperty.Delimiters );

foreach( string s in PropertyItems )
{
if( s.Length == 0 )
continue;
else
{
if( this.Name.Length == 0 )
{
// Extract the name
this.Name = s.ToUpper();
}
else
{
// This must be the value
this.Value = s;
}
}
}

// Remove any bad names from objects
if( ( this.Name == "NAME" ) &&
( ( this.Value.StartsWith( "a " ) ) ||
( this.Value == "#" ) ) )
this.Value = null;
}

/// <summary>
/// Checks to see if this item has a valid property or not,
/// if any of the properties are invalid... the item should
/// not be created.
/// </summary>
public bool IsValidProperty
{
get
{
// Check that this is not an item in a "CONT"
// Items that are inside containers are invalid
if( ( this.Name == "CONT" ) && ( this.Value != "-1" ) )
return false;
// Corpses are invalid
else if( this.Name == "CORPSE" )
return false;
// Any of the following item types are invalid
else if( ( this.Name == "TYPE" ) &&
( ( this.Value == "12" ) || // Unlocked door
( this.Value == "13" ) || // Locked door
( this.Value == "60" ) || // Teleporter
( this.Value == "61" ) || // Item spawner
( this.Value == "62" ) || // NPC spawner
( this.Value == "63" ) || // Item container spawner
( this.Value == "64" ) || // Locked item container spawner
( this.Value == "65" ) || // Unlockable item container spawner
( this.Value == "69" ) ) ) // Area spawner
return false;
// Any of the following item IDs are invalid (signs, etc)
else if( ( this.Name == "ID" ) &&
( ( this.Value == "2965" ) || /* Signs */
( this.Value == "2966" ) ||
( ( int.Parse(this.Value) >= int.Parse("2979") ) &&
( int.Parse(this.Value) <= int.Parse("3086") ) ) ||
( this.Value == "3139" ) ||
( this.Value == "3140" ) ) /* End of signs */ )
return false;
else
return ( this.Name.Length > 0 );
}
}
}

/// <summary>
/// Imports a WSC file filled with items into RunUO format.
/// </summary>
/// <param name="e"></param>
private static void ImportWSC_OnCommand( CommandEventArgs e )
{
// Map that the character is in
Map map = e.Mobile.Map;

// The WSC file
StreamReader WscFile = null;

// The name of the WSC file
string WscFileName = string.Empty;

// New item counter
int NumberOfItems = 0;

// Check that the one argument required is provided
// Argument 1: Full path and file name to WSC file
if( e.Arguments.Length == 1 )
WscFileName = e.Arguments[0];
else
{
e.Mobile.SendMessage( "Usage: ImportWSC <FilePath>" );
e.Mobile.SendMessage( "Example: ImportWSC \"C:\\UO Emulator\\Items.wsc\"" );
return;
}

// Lets try to import all of the items
try
{
// Flag to indicate that the RunUO item list used
// for item conversion has been or not
ConvertableItems RUOItems = null;

// Open the WSC
WscFile = File.OpenText( WscFileName );

Console.Write( "ImportWSC: Processing file [{0}]", WscFileName );

// Process the file
while( WscFile.Peek() >= 0 )
{
// Look for the start of an item
// ( denoted by an open curly brace '{' )
if( WscFile.ReadLine().IndexOf( '{' ) >= 0 )
{
// Found the start of a new item
ImportItem WscItem = new ImportItem();

// Found the start of an item, start reading in the properties
string PropertyInfo = WscFile.ReadLine();

// Keep reading until the end of the item is found
// ( denoted by a closing curly brace '}' )
while( PropertyInfo.IndexOf( '}' ) < 0 )
{
// Get the property
ImportItemProperty WscItemProperty = new ImportItemProperty( PropertyInfo );

// Check if the item property is a valid property, if not
// discard the item
WscItem.IsValidItem = WscItemProperty.IsValidProperty;
if( WscItem.IsValidItem == false )
break;

// Check if it is one of the properties that are to be converted
// If so, set the WSC item property
switch( WscItemProperty.Name )
{
case "ID":
WscItem.ObjectId = Utility.ToInt32( WscItemProperty.Value );
break;

case "NAME":
WscItem.Name = WscItemProperty.Value;
break;

case "X":
WscItem.PositionX = Utility.ToInt32( WscItemProperty.Value );
break;

case "Y":
WscItem.PositionY = Utility.ToInt32( WscItemProperty.Value );
break;

case "Z":
WscItem.PositionZ = Utility.ToInt32( WscItemProperty.Value );
break;

case "COLOR":
WscItem.Colour = Utility.ToInt32( WscItemProperty.Value );
break;

case "AMOUNT":
WscItem.Amount = Utility.ToInt32( WscItemProperty.Value );
break;

case "TYPE":
WscItem.WscType = Utility.ToInt32( WscItemProperty.Value );
break;
}

// Read in the next property
PropertyInfo = WscFile.ReadLine();
}

// Done extracting all of the properties to be converted
// Now check if the item extracted is a valid item
if( WscItem.IsValidItem == true )
{
// Has the RunUO item list been created
if( RUOItems == null )
RUOItems = new ConvertableItems();

// The item is valid, so lets try and create it in RunUO
Item NewItem = WscItem.CreateItem(RUOItems);
if( NewItem != null )
{
// Set the current map to the player who invoked the command
NewItem.Map = e.Mobile.Map;

// Check if this item is of type BaseLight
if( NewItem is BaseLight )
{
// Ignite the light if it does not burn out
BaseLight LightItem = (BaseLight)NewItem;
if( LightItem.Duration == TimeSpan.Zero )
LightItem.Ignite();
}

// Increment the item counter
NumberOfItems++;
Console.Write( "." );
}
}
}
}
}
catch( System.Exception se )
{
// Log the error to the console
Console.WriteLine( Environment.NewLine + "ImportWSC: Exception {0}", se.ToString() );

if( WscFile == null )
e.Mobile.SendMessage( "ImportWSC: File Not Found!" );
else
e.Mobile.SendMessage( "ImportWSC: Error while processing " + WscFileName );
}
finally
{
// Close any open resources
if( WscFile != null )
WscFile.Close();

Console.WriteLine( Environment.NewLine + "ImportWSC: Done. Imported {0} items.", NumberOfItems );
}

// Indicate how many items were converted if any
if( NumberOfItems > 0 )
e.Mobile.SendMessage( "ImportWSC: Imported [" + NumberOfItems + "] items." );

return;
}
}

public class ConvertableItems
{
public ConvertableItems()
{
this._ItemList = new ArrayList();

// Now fill the list with all of the scripted item information
// to this point in RunUO. This is done by getting the list
// of classes derived from Server.Item and creating each object
// in an attempt to determine the items ID number and flippable
// ID's if possible.
Assembly a = System.Reflection.Assembly.GetAssembly( typeof(Server.Items.Backpack) );
Console.WriteLine( "\nConvertableItems - Assembly: " + a.ToString() );

Module[] Modules = a.GetModules();
Console.WriteLine( "ConvertableItems - Total Modules: " + Modules.Length );

foreach( Module m in Modules )
{
Console.WriteLine( "ConvertableItems - Module: " + m.ToString() );

Type[] TypeList = m.FindTypes( null, null );

Console.WriteLine( "ConvertableItems - Total Types: " + TypeList.Length );

foreach( Type t in TypeList )
{
// Check if the current type is an item type
if( t.FullName.StartsWith( "Server.Items." ) == true )
{
// Construct an instance of the class in order to
// get the item ID and flippable ID if available

// Get the items default constructor
ConstructorInfo ci = t.GetConstructor( Type.EmptyTypes );

try
{
// Make sure that the constructor is not abstract
if( ci.IsAbstract == false )
{
// Invoke the constructor (create the item)
Item TheItem = ci.Invoke( null ) as Item;

// Check that the item was constructed properly
if( TheItem != null )
{
// Check if the item has an ID greater than 0
if( TheItem.ItemID != 0 )
{
int[] IdList = new int[1];

// Check if the item has a flippable attribute
object[] Flipable = t.GetCustomAttributes( typeof(Server.Items.FlipableAttribute), false );

// Check if the item is flippable
if( ( Flipable != null ) && ( Flipable.Length > 0 ) )
{
FlipableAttribute fa = Flipable[0] as Server.Items.FlipableAttribute;

if( fa != null )
{
IdList = new int[fa.IdList.Length + 1];

// store the flipable ids
fa.IdList.CopyTo( IdList, 1 );
}
}

// Store the base id
IdList[0] = TheItem.ItemID;

// Add the item type class name to the list
ConversionItemInfo NewItemType = new ConversionItemInfo( t, IdList );
this._ItemList.Add( NewItemType );

Console.WriteLine( "ConvertableItems - Convertible Item Found: " + NewItemType.ToString() );
}

// Delete the item since it is no longer needed
TheItem.Delete();
}
}
}
catch( System.Exception )
{
//Console.WriteLine( "ConvertableItems - Failed to contruct type: {0}", t.FullName );
}
}
}
}

// Indicate the total number of convertable items
Console.WriteLine( "ConvertableItems - Total convertible item types: {0}", this._ItemList.Count );
}

/// <summary>
/// Attempts to find a valid item info object based on the ID provided
/// </summary>
/// <param name="ItemId"></param>
/// <returns></returns>
public ConversionItemInfo FindItemById( int ItemId )
{
// Search through the list for the first item with the
// same ID as the one supplied
foreach( ConversionItemInfo TheItem in this._ItemList )
{
if( TheItem.IsItemId( ItemId ) == true )
return TheItem;
}

return null;
}

public ConversionItemInfo this[int Index]
{
get
{
if( this._ItemList.Count < Index )
return null;
else
return ( this._ItemList[Index] as ConversionItemInfo );
}
}

private ArrayList _ItemList;
}

public class ConversionItemInfo
{
public ConversionItemInfo( Type ItemType, int[] ItemIds )
{
this._Type = ItemType;
this._TypeIDList = ItemIds;
}

public bool IsItemId( int ItemId )
{
bool IsMatch = false;

foreach( int i in this._TypeIDList )
{
if( i == ItemId )
{
IsMatch = true;
break;
}
}

return IsMatch;
}

public override string ToString()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append( "Type: [" );
sb.Append( this._Type.FullName );
sb.Append( "] IDs: [" );
foreach( int i in this._TypeIDList )
{
sb.Append( i );

if( i != this._TypeIDList[this._TypeIDList.Length-1] )
sb.Append( ',' );
}
sb.Append( ']' );

return sb.ToString();
}

public Type ItemType
{
get{ return this._Type; }
}

private Type _Type;
private int[] _TypeIDList;
}
}
[/code:1]

Thanks to bobsmart that published this script.
Ok now go to \Scripts\Items\Misc\FlipableAttribute.cs
and remove everything in it and add this:

[code:1]
// FlipableAttribute by SickLab

using System;
using Server;
using System.Reflection;
using Server.Targeting;

namespace Server.Items
{
public class FlipCommandHandlers
{
public static void Initialize()
{
Server.Commands.Register( "Flip", AccessLevel.Player, new CommandEventHandler( Flip_OnCommand ) );
}

public static void Flip_OnCommand( CommandEventArgs e )
{
e.Mobile.Target = new FlipTarget();
}

private class FlipTarget : Target
{
public FlipTarget() : base( -1, false, TargetFlags.None )
{
}

protected override void OnTarget( Mobile from, object targeted )
{
if ( targeted is Item )
{
Item item = (Item)targeted;

if ( item.Movable == false && from.AccessLevel == AccessLevel.Player )
return;

Type type = targeted.GetType();

FlipableAttribute [] AttributeArray = (FlipableAttribute []) type.GetCustomAttributes(typeof(FlipableAttribute), false);

if( AttributeArray.Length == 0 )
{
return ;
}

FlipableAttribute fa = AttributeArray[0];

fa.Flip( (Item)targeted);
}
}
}
}

[AttributeUsage( AttributeTargets.Class )]
public class FlipableAttribute : Attribute
{
private int[] m_ItemIDs;

public int[] IdList
{
get
{
if( this.m_ItemIDs == null )
return new int[0];
else
return this.m_ItemIDs;
}
}

public FlipableAttribute() : this ( null )
{
}

public FlipableAttribute( params int[] itemIDs )
{
m_ItemIDs = itemIDs;
}

public virtual void Flip( Item item )
{

if ( m_ItemIDs == null )
{
try
{
MethodInfo flipMethod = item.GetType().GetMethod( "Flip", Type.EmptyTypes );
if ( flipMethod != null )
flipMethod.Invoke( item, new object[0] );
}
catch
{
}

}
else
{
int index = 0;
for ( int i = 0; i < m_ItemIDs.Length; i++ )
{
if ( item.ItemID == m_ItemIDs )
{
index = i + 1;
break;
}
}

if ( index > m_ItemIDs.Length - 1)
index = 0;

item.ItemID = m_ItemIDs[index];
}
}
}
}
[/code:1]


Ok now you have almost all files thats needed.
But when I used this worldfile I saw that there was crystals over some places and found that Shurugwi made a script that removes all crystals. But I also found out that pentagrams was added at every dungeon entrace.

Here is the script that remove all crystals
Add to Scripts\Misc (Make a new file called Crystals.cs)

[code:1]using System;
using System.Collections;
using Server;

namespace Server.Custom
{
public class DelCrystals
{
public static void Initialize()
{
Server.Commands.Register( "DelCrystals", AccessLevel.Administrator, new CommandEventHandler( DelCrystals_OnCommand ) );
}

public static void DelCrystals_OnCommand( CommandEventArgs e )
{
ArrayList myitems = new ArrayList();
foreach ( Item item in World.Items.Values )
{
if ( item.ItemID == 7961 )
{
myitems.Add( item );
}
}

e.Mobile.SendMessage( "Deleteing " + myitems.Count + " crystals...");

for ( int i=0;i<myitems.Count;i++ )
{
Item item = (Item)myitems;
item.Delete();
}
e.Mobile.SendMessage ("Done!");

}

}
}[/code:1]

And here is the script that remove all pentagrams (edited the script Shurugwi made)
Add to Scripts\Misc (Make a file called Pentagrams.cs) **UPDATED** Some people reported that it is not pentagrams that was added at every dungeon entrace. So go to the dungeon entrace and do [props on the item that you want to remove (take the ItemID of it) and change the ItemID in this script.

[code:1]using System;
using System.Collections;
using Server.Items;

namespace Server.Custom1
{
public class DelPenta
{
public static void Initialize()
{
Server.Commands.Register( "DelPenta", AccessLevel.Administrator, new CommandEventHandler( DelPenta_OnCommand ) );
}

public static void DelPenta_OnCommand( CommandEventArgs e )
{
ArrayList myitems = new ArrayList();
foreach ( Item item in World.Items.Values )
{
if ( item.ItemID == 4070 )
{
myitems.Add( item );
}
}

e.Mobile.SendMessage( "Deleteing " + myitems.Count + " pentagrams...");

for ( int i=0;i<myitems.Count;i++ )
{
Item item = (Item)myitems;
item.Delete();
}
e.Mobile.SendMessage ("Done!");

}

}
}[/code:1]

**UPDATED** Here is the script that fix Shame.

[code:1]
// Shame Statics and Door Fixer
// By Dougan Ironfist

using System;
using System.Collections;
using System.IO;
using Server;
using Server.Items;

namespace Server.Scripts.Commands
{
public class ShameStaticDoorGenerator
{
public static void Initialize()
{
Server.Commands.Register( "FixShame", AccessLevel.Administrator, new CommandEventHandler( FixShame_OnCommand ) );
}

public static void FixShame_OnCommand( CommandEventArgs c )
{
Process( Map.Trammel );
Process( Map.Felucca );
}

public static void Process( Map map )
{
int added = 0;

World.Broadcast( 0x35, true, "Generating items for {0}.", map );

added += Add_Static( 0x71e, new Point3D( 5490, 19, -30 ), map );
added += Add_Static( 0x71e, new Point3D( 5514, 10, 0 ), map );
added += Add_Static( 0x71e, new Point3D( 5513, 9, 0 ), map );
added += Add_Static( 0x50a, new Point3D( 5546, 12, 0 ), map );
added += Add_Static( 0x50a, new Point3D( 5546, 13, 0 ), map );
added += Add_Static( 0x50a, new Point3D( 5546, 14, 0 ), map );
added += Add_Static( 0x50a, new Point3D( 5548, 14, 0 ), map );
added += Add_Static( 0x50a, new Point3D( 5553, 14, 0 ), map );
added += Add_Static( 0x50a, new Point3D( 5555, 12, 0 ), map );
added += Add_Static( 0x1797, new Point3D( 5545, 14, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5546, 16, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5547, 16, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5547, 15, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5547, 14, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5548, 14, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5548, 16, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5549, 16, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5550, 16, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5550, 15, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5553, 9, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5554, 11, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5555, 11, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5555, 10, -4 ), map );
added += Add_Static( 0x80f, new Point3D( 5552, 15, 0 ), map );
added += Add_Static( 0x1797, new Point3D( 5616, 56, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5617, 58, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5616, 63, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5617, 65, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5619, 65, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5620, 67, -4 ), map );
added += Add_Static( 0x1797, new Point3D( 5620, 66, -15 ), map );
added += Add_Static( 0x1797, new Point3D( 5621, 66, -4 ), map );
added += Add_Static( 0x7f0, new Point3D( 5617, 70, 0 ), map );
added += Add_Static( 0x509, new Point3D( 5620, 66, 0 ), map );
added += Add_Static( 0x51f, new Point3D( 5574, 199, 22 ), map );
added += Add_Static( 0x242, new Point3D( 5540, 173, 0 ), map );
added += Add_Static( 0x242, new Point3D( 5540, 172, 0 ), map );
added += Add_Static( 0x242, new Point3D( 5540, 170, 0 ), map );
added += Add_Static( 0x242, new Point3D( 5540, 169, 0 ), map );
added += Add_Static( 0x242, new Point3D( 5540, 168, 0 ), map );
added += Add_Static( 0x241, new Point3D( 5508, 182, 0 ), map );
added += Add_Static( 0x242, new Point3D( 5504, 178, 0 ), map );
added += Add_Static( 0x179a, new Point3D( 5671, 42, -15 ), map );
added += Add_Static( 0x179a, new Point3D( 5672, 44, -4 ), map );
added += Add_Static( 0x179a, new Point3D( 5673, 43, -4 ), map );
added += Add_Static( 0x179a, new Point3D( 5673, 44, -4 ), map );
added += Add_Static( 0x1798, new Point3D( 5435, 167, -15 ), map );
added += Add_Static( 0x1798, new Point3D( 5436, 169, -4 ), map );
added += Add_Static( 0x1798, new Point3D( 5437, 169, -4 ), map );
added += Add_Static( 0x1798, new Point3D( 5437, 168, -4 ), map );
added += Add_Static( 0x4c9, new Point3D( 5460, 185, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5460, 186, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5460, 187, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5460, 188, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5456, 185, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5456, 186, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5456, 187, 0 ), map );
added += Add_Static( 0x4c9, new Point3D( 5456, 188, 0 ), map );
added += Add_Static( 0x51e, new Point3D( 5443, 179, 22 ), map );
added += Add_Static( 0x51e, new Point3D( 5444, 179, 22 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5490, 19, -24 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5514, 10, 6 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5604, 102, 6 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5514, 147, 26 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5538, 170, 6 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5513, 176, 6 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5507, 162, 6 ), map );
added += Add_Static( 0x1fd4, new Point3D( 5875, 19, -4 ), map );

added += Add_Item( new MetalDoor( DoorFacing.SouthCCW ), new Point3D( 5583, 195, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.NorthCW ), new Point3D( 5583, 194, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.WestCW ), new Point3D( 5570, 198, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCW ), new Point3D( 5578, 202, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCW ), new Point3D( 5579, 187, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCW ), new Point3D( 5577, 188, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCW ), new Point3D( 5575, 195, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.NorthCCW ), new Point3D( 5579, 202, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.EastCW ), new Point3D( 5571, 198, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.EastCW ), new Point3D( 5581, 191, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.WestCCW ), new Point3D( 5540, 183, 0 ), map );
added += Add_Item( new SecretDungeonDoor( DoorFacing.SouthCW ), new Point3D( 5540, 171, 2 ), map );
added += Add_Item( new MetalDoor( DoorFacing.EastCW ), new Point3D( 5517, 178, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.WestCW ), new Point3D( 5507, 182, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCCW ), new Point3D( 5504, 179, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.EastCW ), new Point3D( 5506, 167, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCCW ), new Point3D( 5818, 54, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCCW ), new Point3D( 5823, 51, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.NorthCW ), new Point3D( 5823, 50, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCCW ), new Point3D( 5447, 187, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.NorthCW ), new Point3D( 5447, 186, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.WestCW ), new Point3D( 5435, 190, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCW ), new Point3D( 5441, 194, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCW ), new Point3D( 5443, 180, 0 ), map );
added += Add_Item( new MetalDoor( DoorFacing.SouthCCW ), new Point3D( 5441, 193, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.NorthCCW ), new Point3D( 5440, 187, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.EastCW ), new Point3D( 5434, 190, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.EastCW ), new Point3D( 5445, 183, 22 ), map );
added += Add_Item( new MetalDoor( DoorFacing.NorthCW ), new Point3D( 5442, 179, 22 ), map );

added += Add_Item( new Teleporter( new Point3D( 5513, 176, 5 ), map ), new Point3D( 5538, 170, 5 ), map );
added += Add_Item( new Teleporter( new Point3D( 5538, 170, 5 ), map ), new Point3D( 5513, 176, 5 ), map );

World.Broadcast( 0x35, true, "Generation complete. {0} statics generated.", added );
}

public static int Add_Static( int itemid, Point3D location, Map map )
{
bool hasStatic = false;

IPooledEnumerable eable = map.GetItemsInRange( location, 0 );

foreach ( Item item in eable )
{
if (( item is Static ) && ( item.Location == location ))
hasStatic = true;
}

eable.Free();

if ( hasStatic )
return 0;

new Static( itemid ).MoveToWorld( location, map );
return 1;
}

public static int Add_Item( Item newitem, Point3D location, Map map )
{
bool hasItem = false;

IPooledEnumerable eable = map.GetItemsInRange( location, 0 );

foreach ( Item item in eable )
{
if (( item is Item ) && ( item.Location == location ))
hasItem = true;
}

eable.Free();

if ( hasItem )
return 0;

newitem.MoveToWorld( location, map );
return 1;
}
}
}
[/code:1]

Ok now ill explain how to get the worldfile items ingame.
Go online with your admin character.
Use thoose commands:
[ImportWSC <file path>
Example: [ImportWSC C:\Pol-RunUO.wsc
[DelCrystals
[DelPenta
[signgen
[doorgen
[telgen
[FixShame
Before using the [moongen command then I suggest you to go and remove all the currently moongates.

And save :)
There you have a fully decorated world.
If you have any questions then just ask.
 

el_scrubo

Wanderer
i like it. but i have to say, i tried the doorgen and it locked up my computer. should i run it as soon as i reboot my system? the one the server runs on isn't that bad. its a duron 1g, 256m ram and yet i still have performance issues. i'll try it though, i kinda need a full world. thank very much :D
 

Phantom

Knight
256 Ram is not alot of ram, The doorgen is a very light load on your server. if such a simple task locks your computer then I am not sure what to say?

When you use it, you do know clients won't be able to move, the server will pause to add the doors. Your computer should handle this load, but why don't you decorate it by hand? Why do people seek an "easy" way to get decoration done.
 

BtDMH

Wanderer
Phantom said:
Why do people seek an "easy" way to get decoration done.

I dont fault others for doing so, but not me buddy !
I have been a amatuer artist for years and I just HAVE to get in the game and do it up myself to make it look right. I have a vision in my head how things should look, and no script can achieve it.

But I certainly wish the poeple after auto-decor good luck !


Brian the Dungeonmaster
 
I agree bd, I have my whole 1800 picture replicate folder of Baja. Im just a few pics off (stop server for a bit due to real life) but I would NEVEr use a pre done world, simple cuase I like my world and its a artist type thing. Its your own master peice, something to call your own. However If I say went to a new emu and just wanted to play my own server, I would fully understand in a premade world.
 

Fury

Wanderer
most people have done it before.. decorating a whole world gets old after youve done it once.. id just assume get a good base and alter that as i see fit.. i appreciate people who wanna do it themselves but its not for everyone
 

Hunter

Sorceror
Why do people seek an "easy" way to get decoration done.


It saves many hours of work. Today in real world, people do stuff to save alot of hours. And I dont see why a player cant save hours on a game?
They choose, not you.
 
L

Lost User

Guest
I agree with pretty much everything posted so far. Sometimes adding your own deco is a good thing, somtimes having everything predone is a good thing.

I am on a 56k connection, so I only host my shard for my girlfriend/friends/family... I have added all the objects myself before, its very time consuming and I really dont want to have to do it again. Seeing as this shard is only for leasure and is also a private shard, taking shortcuts is not such a bad thing.

When I get broardband (its getting added in a few weeks) I may consider hosting a more professional shard, but still private. I dont thing that my connection and also my patiance is enough to host a public shard.

Heh heh! Just ordered AOS... it gets released here (in england) on the 17th march (i think). Eaven if I dont play OSI at the moment, its handy to have considering Run UO will support it.

- Dark Konoko
 

Voran

Wanderer
Well, current release date is the 7th from most stores. Or the 28th Feb... or the 26th March, or the...
*gives up*
 

helium

Wanderer
I also agree with everything posted. Making your own shard is more than just getting players to get on and do what they do. I think when you design your own world and put objects and things in yourself, you appreciate it more. It takes a hell of a long time, but its fun.
 
L

Lost User

Guest
Voran said:
Well, current release date is the 7th from most stores. Or the 28th Feb... or the 26th March, or the...
*gives up*

Heh heh! Its the 7th from Amazon.co.uk
 

brodock

Sorceror
if i don't use an empity worldfile what will occuor?
and how can i do that with a non empity worldfile?
 

bleis

Sorceror
Files ?!?!?!

Hello I just added the files like you told on the forum, but I´m having a hard time getteing em to work.

When I get online with my admin and got to import the pol file it sayes it not there !??

I made all files like you said to and it all in E:\RunUO programmer folder, would it be possibly for you to write the paths that I should command as admin for it to worke :O)
 

Hunter

Sorceror
brodockbr said:
if i don't use an empity worldfile what will occuor?
and how can i do that with a non empity worldfile?


I suggest you test before you add it to your shard. It wont add doors or signs.
 

brodock

Sorceror
Hunter said:
brodockbr said:
if i don't use an empity worldfile what will occuor?
and how can i do that with a non empity worldfile?


I suggest you test before you add it to your shard. It wont add doors or signs.
[doorgen
[signgen
[telegen
[moongen
i think this should solve your problem :D
WHY PEOPLE NEVER FOLLOW INSTRUCTIONS?
 

Xacker

Wanderer
Yop if u are so leazy tu decorate worl then read instructions cerfuly
:) meaby u nead pres the break buton :) in your mind :)
OK

Som one haw difrent world files then tihis one pol file ?
 
B

bensonwrx

Guest
Re: Files ?!?!?!

bleis said:
Hello I just added the files like you told on the forum, but I´m having a hard time getteing em to work.

When I get online with my admin and got to import the pol file it sayes it not there !??

I made all files like you said to and it all in E:\RunUO programmer folder, would it be possibly for you to write the paths that I should command as admin for it to worke :O)

Did you try putting the pol file into the computer HD thats running the server? Then run the command remotely via the PC you are running the client.

Hope this help

-Benson
 
Top