Beispiel #1
0
        public MagicVines(VinesLockedSecretDoor door)
            : base(0xCF1)
        {
            m_Door = door;

            Weight  = 1.0;
            Movable = false;
        }
        public MagicVines( VinesLockedSecretDoor door )
            : base(0xCF1)
        {
            m_Door = door;

            Weight = 1.0;
            Movable = false;
        }
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            /*int version =*/
            reader.ReadInt();

            m_Door = reader.ReadItem() as VinesLockedSecretDoor;

            Visible = true;
        }
Beispiel #4
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            /*int version =*/
            reader.ReadInt();

            m_Door = reader.ReadItem() as VinesLockedSecretDoor;

            Visible = true;
        }
Beispiel #5
0
        public Item Construct()
        {
            Item item;

            try
            {
                if ( m_Type == typeofStatic )
                {
                    item = new Static( m_ItemID );
                }
                else if ( m_Type == typeofLocalizedStatic )
                {
                    int labelNumber = 0;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "LabelNumber" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                labelNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                                break;
                            }
                        }
                    }

                    item = new LocalizedStatic( m_ItemID, labelNumber );
                }
                else if ( m_Type == typeofLocalizedSign )
                {
                    int labelNumber = 0;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "LabelNumber" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                labelNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                                break;
                            }
                        }
                    }

                    item = new LocalizedSign( m_ItemID, labelNumber );
                }
                else if ( m_Type == typeofAnkhWest || m_Type == typeofAnkhEast )
                {
                    bool bloodied = false;

                    for ( int i = 0; !bloodied && i < m_Params.Length; ++i )
                    {
                        bloodied = ( m_Params[i] == "Bloodied" );
                    }

                    if ( m_Type == typeofAnkhWest )
                    {
                        item = new AnkhWest( bloodied );
                    }
                    else
                    {
                        item = new AnkhEast( bloodied );
                    }
                }
                else if ( m_Type == typeofMarkContainer )
                {
                    bool bone = false;
                    bool locked = false;
                    Map map = Map.Malas;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i] == "Bone" )
                        {
                            bone = true;
                        }
                        else if ( m_Params[i] == "Locked" )
                        {
                            locked = true;
                        }
                        else if ( m_Params[i].StartsWith( "TargetMap" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                map = Map.Parse( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    MarkContainer mc = new MarkContainer( bone, locked );

                    mc.TargetMap = map;
                    mc.Description = "strange location";

                    item = mc;
                }
                else if ( m_Type == typeofHintItem )
                {
                    int range = 0;
                    int messageNumber = 0;
                    string messageString = null;
                    int hintNumber = 0;
                    string hintString = null;
                    TimeSpan resetDelay = TimeSpan.Zero;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "Range" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "WarningString" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                messageString = m_Params[i].Substring( ++indexOf );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "WarningNumber" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                messageNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "HintString" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                hintString = m_Params[i].Substring( ++indexOf );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "HintNumber" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                hintNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "ResetDelay" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                resetDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    HintItem hi = new HintItem( m_ItemID, range, messageNumber, hintNumber );

                    hi.WarningString = messageString;
                    hi.HintString = hintString;
                    hi.ResetDelay = resetDelay;

                    item = hi;
                }
                else if ( m_Type == typeofWarningItem )
                {
                    int range = 0;
                    int messageNumber = 0;
                    string messageString = null;
                    TimeSpan resetDelay = TimeSpan.Zero;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "Range" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "WarningString" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                messageString = m_Params[i].Substring( ++indexOf );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "WarningNumber" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                messageNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "ResetDelay" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                resetDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    WarningItem wi = new WarningItem( m_ItemID, range, messageNumber );

                    wi.WarningString = messageString;
                    wi.ResetDelay = resetDelay;

                    item = wi;
                }
                else if ( m_Type == typeofCannon )
                {
                    CannonDirection direction = CannonDirection.North;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "CannonDirection" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                direction = (CannonDirection) Enum.Parse( typeof( CannonDirection ), m_Params[i].Substring( ++indexOf ), true );
                            }
                        }
                    }

                    item = new Cannon( direction );
                }
                else if ( m_Type == typeofSerpentPillar )
                {
                    string word = null;
                    Rectangle2D destination = new Rectangle2D();

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "Word" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                word = m_Params[i].Substring( ++indexOf );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "DestStart" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                destination.Start = Point2D.Parse( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "DestEnd" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                destination.End = Point2D.Parse( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    item = new SerpentPillar( word, destination );
                }
                else if ( m_Type == typeofResurrectItem )
                {
                    ResurrectMessage message = ResurrectMessage.Generic;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "ResurrectMessage" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                message = (ResurrectMessage) Enum.Parse( typeof( ResurrectMessage ), m_Params[i].Substring( ++indexOf ), true );
                            }
                        }
                    }

                    item = new ResurrectItem( message );
                }
                else if ( m_Type == typeofUnderworldSecretDoor )
                {
                    int closedId = 1, mediumId = 1;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "ClosedId" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                closedId = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "MediumId" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                mediumId = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    item = new UnderworldSecretDoor( closedId, mediumId );
                }
                else if ( m_Type == typeofTombOfKingsSecretDoor )
                {
                    int closedId = 1;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "ClosedId" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                closedId = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    item = new TombOfKingsSecretDoor( closedId );
                }
                else if ( m_Type == typeofVinesLockedSecretDoor )
                {
                    int closedId = 1, mediumId = 1;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "ClosedId" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                closedId = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                        else if ( m_Params[i].StartsWith( "MediumId" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                mediumId = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }

                    item = new VinesLockedSecretDoor( closedId, mediumId );
                }
                else if ( m_Type.IsSubclassOf( typeofBeverage ) )
                {
                    BeverageType content = BeverageType.Liquor;
                    bool fill = false;

                    for ( int i = 0; !fill && i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "Content" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                content = (BeverageType) Enum.Parse( typeof( BeverageType ), m_Params[i].Substring( ++indexOf ), true );
                                fill = true;
                            }
                        }
                    }

                    if ( fill )
                    {
                        item = (Item) Activator.CreateInstance( m_Type, new object[] { content } );
                    }
                    else
                    {
                        item = (Item) Activator.CreateInstance( m_Type );
                    }
                }
                else if ( m_Type.IsSubclassOf( typeofBaseDoor ) )
                {
                    DoorFacing facing = DoorFacing.WestCW;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "Facing" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                facing = (DoorFacing) Enum.Parse( typeof( DoorFacing ), m_Params[i].Substring( ++indexOf ), true );
                                break;
                            }
                        }
                    }

                    item = (Item) Activator.CreateInstance( m_Type, new object[] { facing } );
                }
                else
                {
                    item = (Item) Activator.CreateInstance( m_Type );
                }
            }
            catch ( Exception e )
            {
                throw new Exception( String.Format( "Bad type: {0}", m_Type ), e );
            }

            if ( item is BaseAddon )
            {
                if ( item is MaabusCoffin )
                {
                    MaabusCoffin coffin = (MaabusCoffin) item;

                    for ( int i = 0; i < m_Params.Length; ++i )
                    {
                        if ( m_Params[i].StartsWith( "SpawnLocation" ) )
                        {
                            int indexOf = m_Params[i].IndexOf( '=' );

                            if ( indexOf >= 0 )
                            {
                                coffin.SpawnLocation = Point3D.Parse( m_Params[i].Substring( ++indexOf ) );
                            }
                        }
                    }
                }
                else if ( m_ItemID > 0 )
                {
                    ArrayList comps = ( (BaseAddon) item ).AddonComponents;

                    for ( int i = 0; i < comps.Count; ++i )
                    {
                        AddonComponent comp = (AddonComponent) comps[i];

                        if ( comp.Offset == Point3D.Zero )
                        {
                            comp.ItemID = m_ItemID;
                        }
                    }
                }
            }
            else if ( item is BaseLight )
            {
                bool unlit = false;

                for ( int i = 0; !unlit && i < m_Params.Length; ++i )
                {
                    unlit = ( m_Params[i] == "Unlit" );
                }

                if ( !unlit )
                {
                    ( (BaseLight) item ).Ignite();
                }

                ( (BaseLight) item ).Protected = true;

                if ( m_ItemID > 0 )
                {
                    item.ItemID = m_ItemID;
                }
            }
            else if ( item is Server.Mobiles.Spawner )
            {
                Server.Mobiles.Spawner sp = (Server.Mobiles.Spawner) item;

                sp.NextSpawn = TimeSpan.Zero;

                for ( int i = 0; i < m_Params.Length; ++i )
                {
                    if ( m_Params[i].StartsWith( "Spawn" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.CreaturesName.Add( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MinDelay" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.MinDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MaxDelay" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.MaxDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "NextSpawn" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.NextSpawn = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Count" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.Count = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Team" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.Team = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "HomeRange" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.HomeRange = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Running" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.Running = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Group" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            sp.Group = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                }
            }
            else if ( item is RecallRune )
            {
                RecallRune rune = (RecallRune) item;

                for ( int i = 0; i < m_Params.Length; ++i )
                {
                    if ( m_Params[i].StartsWith( "Description" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            rune.Description = m_Params[i].Substring( ++indexOf );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Marked" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            rune.Marked = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "TargetMap" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            rune.TargetMap = Map.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Target" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            rune.Target = Point3D.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                }
            }
            else if ( item is SkillTeleporter )
            {
                SkillTeleporter tp = (SkillTeleporter) item;

                for ( int i = 0; i < m_Params.Length; ++i )
                {
                    if ( m_Params[i].StartsWith( "Skill" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Skill = (SkillName) Enum.Parse( typeof( SkillName ), m_Params[i].Substring( ++indexOf ), true );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "RequiredFixedPoint" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Required = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ) * 0.01;
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Required" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Required = Utility.ToDouble( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MessageString" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.MessageString = m_Params[i].Substring( ++indexOf );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MessageNumber" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.MessageNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "PointDest" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.PointDest = Point3D.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MapDest" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.MapDest = Map.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Creatures" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Creatures = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "SourceEffect" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.SourceEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "DestEffect" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.DestEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "SoundID" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.SoundID = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Delay" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Delay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                }

                if ( m_ItemID > 0 )
                {
                    item.ItemID = m_ItemID;
                }
            }
            else if ( item is KeywordTeleporter )
            {
                KeywordTeleporter tp = (KeywordTeleporter) item;

                for ( int i = 0; i < m_Params.Length; ++i )
                {
                    if ( m_Params[i].StartsWith( "Substring" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Substring = m_Params[i].Substring( ++indexOf );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Keyword" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Keyword = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Range" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "PointDest" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.PointDest = Point3D.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MapDest" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.MapDest = Map.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Creatures" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Creatures = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "SourceEffect" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.SourceEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "DestEffect" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.DestEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "SoundID" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.SoundID = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Delay" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Delay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                }

                if ( m_ItemID > 0 )
                {
                    item.ItemID = m_ItemID;
                }
            }
            else if ( item is Teleporter )
            {
                Teleporter tp = (Teleporter) item;

                for ( int i = 0; i < m_Params.Length; ++i )
                {
                    if ( m_Params[i].StartsWith( "PointDest" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.PointDest = Point3D.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "MapDest" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.MapDest = Map.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Creatures" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Creatures = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "SourceEffect" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.SourceEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "DestEffect" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.DestEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "SoundID" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.SoundID = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                    else if ( m_Params[i].StartsWith( "Delay" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            tp.Delay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) );
                        }
                    }
                }

                if ( m_ItemID > 0 )
                {
                    item.ItemID = m_ItemID;
                }
            }
            else if ( item is FillableContainer )
            {
                FillableContainer cont = (FillableContainer) item;

                for ( int i = 0; i < m_Params.Length; ++i )
                {
                    if ( m_Params[i].StartsWith( "ContentType" ) )
                    {
                        int indexOf = m_Params[i].IndexOf( '=' );

                        if ( indexOf >= 0 )
                        {
                            cont.ContentType = (FillableContentType) Enum.Parse( typeof( FillableContentType ), m_Params[i].Substring( ++indexOf ), true );
                        }
                    }
                }

                if ( m_ItemID > 0 )
                {
                    item.ItemID = m_ItemID;
                }
            }
            else if ( m_ItemID > 0 )
            {
                item.ItemID = m_ItemID;
            }

            item.Movable = false;

            for ( int i = 0; i < m_Params.Length; ++i )
            {
                if ( m_Params[i].StartsWith( "Light" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                    {
                        item.Light = (LightType) Enum.Parse( typeof( LightType ), m_Params[i].Substring( ++indexOf ), true );
                    }
                }
                else if ( m_Params[i].StartsWith( "Hue" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                    {
                        int hue = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );

                        if ( item is DyeTub )
                        {
                            ( (DyeTub) item ).DyedHue = hue;
                        }
                        else
                        {
                            item.Hue = hue;
                        }
                    }
                }
                else if ( m_Params[i].StartsWith( "Name" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                    {
                        item.Name = m_Params[i].Substring( ++indexOf );
                    }
                }
                else if ( m_Params[i].StartsWith( "Label1" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                        item.Label1 = m_Params[i].Substring( ++indexOf );
                }
                else if ( m_Params[i].StartsWith( "Label2" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                        item.Label2 = m_Params[i].Substring( ++indexOf );
                }
                else if ( m_Params[i].StartsWith( "Label3" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                        item.Label3 = m_Params[i].Substring( ++indexOf );
                }
                else if ( m_Params[i].StartsWith( "Amount" ) )
                {
                    int indexOf = m_Params[i].IndexOf( '=' );

                    if ( indexOf >= 0 )
                    {
                        // Must supress stackable warnings

                        bool wasStackable = item.Stackable;

                        item.Stackable = true;
                        item.Amount = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
                        item.Stackable = wasStackable;
                    }
                }
            }

            return item;
        }