Go Back   RunUO - Ultima Online Emulation > RunUO > Script Support

Script Support Get support for modifying RunUO Scripts, or writing your own!

Reply
 
Thread Tools Display Modes
Old 12-01-2009, 02:47 PM   #1 (permalink)
Forum Novice
 
mehoo's Avatar
 
Join Date: Aug 2006
Location: SLC Utah
Posts: 335
Default Bad serialize?

I am attempting to add the preuor style magic clothing. The server compiles but it askes me to delete all the clothing items upon server startup. Is this just because I added some stuff the the serialize code or did I make a mistake somewhere?

Baseclothing.cs

Any help would be greatly appreciated.

Code:
using System;
using System.Text;
using System.Collections.Generic;
using Server;
using Server.Engines.Craft;
using Server.Factions;
using Server.Network;

namespace Server.Items
{
    public enum ClothingQuality
    {
        Low,
        Regular,
        Exceptional
    }

    public interface IArcaneEquip
    {
        bool IsArcane{ get; }
        int CurArcaneCharges{ get; set; }
        int MaxArcaneCharges{ get; set; }
    }

    public abstract class BaseClothing : Item, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability
    {
        #region Factions
        private FactionItem m_FactionState;

        public FactionItem FactionItemState
        {
            get{ return m_FactionState; }
            set
            {
                m_FactionState = value;

                if ( m_FactionState == null )
                    Hue = 0;

                LootType = ( m_FactionState == null ? LootType.Regular : LootType.Blessed );
            }
        }
        #endregion

        public enum PreUORMagAff
        {
            None,
            Clumsiness,
            Feeblemindedness,
            Weakness,
            Agility,
            Cunning,
            Strength,
            Curses,
            NightEyes,
            Blessings,
            SpellReflection,
            Invisibility
        }

        public virtual bool CanFortify{ get{ return true; } }
        private bool m_Identified;

        private int m_MaxHitPoints;
        private int m_HitPoints;
        private Mobile m_Crafter;
        private ClothingQuality m_Quality;
        private bool m_PlayerConstructed;
        protected CraftResource m_Resource;
        private int m_StrReq = -1;

        private AosAttributes m_AosAttributes;
        private AosArmorAttributes m_AosClothingAttributes;
        private AosSkillBonuses m_AosSkillBonuses;
        private AosElementAttributes m_AosResistances;
        private PreUORMagAff m_PreUORMagAff;
        private int MagAffCharges = Utility.Random(20, 30);

        [CommandProperty(AccessLevel.GameMaster)]
        public PreUORMagAff MagicAffect
        {
            get { return m_PreUORMagAff; }
            set { m_PreUORMagAff = value; InvalidateProperties(); }
        }
        [CommandProperty(AccessLevel.GameMaster)]
        public int AffectCharges
        {
            get { return MagAffCharges; }
            set { MagAffCharges = value; InvalidateProperties(); }
        }

        [CommandProperty(AccessLevel.GameMaster)]
        public bool Identified
        {
            get { return m_Identified; }
            set { m_Identified = value; InvalidateProperties(); }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public int MaxHitPoints
        {
            get{ return m_MaxHitPoints; }
            set{ m_MaxHitPoints = value; InvalidateProperties(); }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public int HitPoints
        {
            get 
            {
                return m_HitPoints;
            }
            set 
            {
                if ( value != m_HitPoints && MaxHitPoints > 0 )
                {
                    m_HitPoints = value;

                    if ( m_HitPoints < 0 )
                        Delete();
                    else if ( m_HitPoints > MaxHitPoints )
                        m_HitPoints = MaxHitPoints;

                    InvalidateProperties();
                }
            }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public Mobile Crafter
        {
            get{ return m_Crafter; }
            set{ m_Crafter = value; InvalidateProperties(); }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public int StrRequirement
        {
            get{ return ( m_StrReq == -1 ? (Core.AOS ? AosStrReq : OldStrReq) : m_StrReq ); }
            set{ m_StrReq = value; InvalidateProperties(); }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public ClothingQuality Quality
        {
            get{ return m_Quality; }
            set{ m_Quality = value; InvalidateProperties(); }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public bool PlayerConstructed
        {
            get{ return m_PlayerConstructed; }
            set{ m_PlayerConstructed = value; }
        }

        public virtual CraftResource DefaultResource{ get{ return CraftResource.None; } }

        [CommandProperty( AccessLevel.GameMaster )]
        public CraftResource Resource
        {
            get{ return m_Resource; }
            set{ m_Resource = value; Hue = CraftResources.GetHue( m_Resource ); InvalidateProperties(); }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public AosAttributes Attributes
        {
            get{ return m_AosAttributes; }
            set{}
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public AosArmorAttributes ClothingAttributes
        {
            get{ return m_AosClothingAttributes; }
            set{}
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public AosSkillBonuses SkillBonuses
        {
            get{ return m_AosSkillBonuses; }
            set{}
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public AosElementAttributes Resistances
        {
            get{ return m_AosResistances; }
            set{}
        }

        public virtual int BasePhysicalResistance{ get{ return 0; } }
        public virtual int BaseFireResistance{ get{ return 0; } }
        public virtual int BaseColdResistance{ get{ return 0; } }
        public virtual int BasePoisonResistance{ get{ return 0; } }
        public virtual int BaseEnergyResistance{ get{ return 0; } }

        public override int PhysicalResistance{ get{ return BasePhysicalResistance + m_AosResistances.Physical; } }
        public override int FireResistance{ get{ return BaseFireResistance + m_AosResistances.Fire; } }
        public override int ColdResistance{ get{ return BaseColdResistance + m_AosResistances.Cold; } }
        public override int PoisonResistance{ get{ return BasePoisonResistance + m_AosResistances.Poison; } }
        public override int EnergyResistance{ get{ return BaseEnergyResistance + m_AosResistances.Energy; } }

        public virtual int ArtifactRarity{ get{ return 0; } }

        public virtual int BaseStrBonus{ get{ return 0; } }
        public virtual int BaseDexBonus{ get{ return 0; } }
        public virtual int BaseIntBonus { get { return 0; } }

        public override bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
        {
            if ( !Ethics.Ethic.CheckTrade( from, to, newOwner, this ) )
                return false;

            return base.AllowSecureTrade( from, to, newOwner, accepted );
        }

        public virtual Race RequiredRace { get { return null; } }

        public override bool CanEquip( Mobile from )
        {
            if ( !Ethics.Ethic.CheckEquip( from, this ) )
                return false;

            if( from.AccessLevel < AccessLevel.GameMaster )
            {
                if( RequiredRace != null && from.Race != RequiredRace )
                {
                    if( RequiredRace == Race.Elf )
                        from.SendLocalizedMessage( 1072203 ); // Only Elves may use this.
                    else
                        from.SendMessage( "Only {0} may use this.", RequiredRace.PluralName );

                    return false;
                }
                else if( !AllowMaleWearer && !from.Female )
                {
                    if( AllowFemaleWearer )
                        from.SendLocalizedMessage( 1010388 ); // Only females can wear this.
                    else
                        from.SendMessage( "You may not wear this." );

                    return false;
                }
                else if( !AllowFemaleWearer && from.Female )
                {
                    if( AllowMaleWearer )
                        from.SendLocalizedMessage( 1063343 ); // Only males can wear this.
                    else
                        from.SendMessage( "You may not wear this." );

                    return false;
                }
                else
                {
                    int strBonus = ComputeStatBonus( StatType.Str );
                    int strReq = ComputeStatReq( StatType.Str );

                    if( from.Str < strReq || (from.Str + strBonus) < 1 )
                    {
                        from.SendLocalizedMessage( 500213 ); // You are not strong enough to equip that.
                        return false;
                    }
                }
            }

            return base.CanEquip( from );
        }

        public virtual int AosStrReq{ get{ return 10; } }
        public virtual int OldStrReq{ get{ return 0; } }

        public virtual int InitMinHits{ get{ return 0; } }
        public virtual int InitMaxHits{ get{ return 0; } }

        public virtual bool AllowMaleWearer{ get{ return true; } }
        public virtual bool AllowFemaleWearer{ get{ return true; } }
        public virtual bool CanBeBlessed{ get{ return true; } }

        public int ComputeStatReq( StatType type )
        {
            int v;

            //if ( type == StatType.Str )
                v = StrRequirement;

            return AOS.Scale( v, 100 - GetLowerStatReq() );
        }

        public int ComputeStatBonus( StatType type )
        {
            if ( type == StatType.Str )
                return BaseStrBonus + Attributes.BonusStr;
            else if ( type == StatType.Dex )
                return BaseDexBonus + Attributes.BonusDex;
            else
                return BaseIntBonus + Attributes.BonusInt;
        }

        public virtual void AddStatBonuses( Mobile parent )
        {
            if ( parent == null )
                return;

            int strBonus = ComputeStatBonus( StatType.Str );
            int dexBonus = ComputeStatBonus( StatType.Dex );
            int intBonus = ComputeStatBonus( StatType.Int );

            if ( strBonus == 0 && dexBonus == 0 && intBonus == 0 )
                return;

            string modName = this.Serial.ToString();

            if ( strBonus != 0 )
                parent.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) );

            if ( dexBonus != 0 )
                parent.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) );

            if ( intBonus != 0 )
                parent.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) );
        }

        public static void ValidateMobile( Mobile m )
        {
            for ( int i = m.Items.Count - 1; i >= 0; --i )
            {
                if ( i >= m.Items.Count )
                    continue;

                Item item = m.Items[i];

                if ( item is BaseClothing )
                {
                    BaseClothing clothing = (BaseClothing)item;

                    if( clothing.RequiredRace != null && m.Race != clothing.RequiredRace )
                    {
                        if( clothing.RequiredRace == Race.Elf )
                            m.SendLocalizedMessage( 1072203 ); // Only Elves may use this.
                        else
                            m.SendMessage( "Only {0} may use this.", clothing.RequiredRace.PluralName );

                        m.AddToBackpack( clothing );
                    }
                    else if ( !clothing.AllowMaleWearer && !m.Female && m.AccessLevel < AccessLevel.GameMaster )
                    {
                        if ( clothing.AllowFemaleWearer )
                            m.SendLocalizedMessage( 1010388 ); // Only females can wear this.
                        else
                            m.SendMessage( "You may not wear this." );

                        m.AddToBackpack( clothing );
                    }
                    else if ( !clothing.AllowFemaleWearer && m.Female && m.AccessLevel < AccessLevel.GameMaster )
                    {
                        if ( clothing.AllowMaleWearer )
                            m.SendLocalizedMessage( 1063343 ); // Only males can wear this.
                        else
                            m.SendMessage( "You may not wear this." );

                        m.AddToBackpack( clothing );
                    }
                }
            }
        }

        public int GetLowerStatReq()
        {
            //if ( !Core.AOS )
                //return 0;

            return m_AosClothingAttributes.LowerStatReq;
        }

        public override void OnAdded( object parent )
        {
            Mobile mob = parent as Mobile;

            if ( mob != null )
            {
                //if ( Core.AOS )
                    m_AosSkillBonuses.AddTo( mob );

                AddStatBonuses( mob );
                mob.CheckStatTimers();
            }

            //teleportation code can only be used by double clicking a ring (does not have to be worn) code for it is in ring.cs
            //If the cursed items are affecting PvP too much (using them to unparalize themselves) just delete the "from.Paralized = false;" part.
            if (m_PreUORMagAff != PreUORMagAff.None && parent is Mobile && MagAffCharges != 0)
            {
                Mobile from = (Mobile)parent;
                if (m_PreUORMagAff == PreUORMagAff.Clumsiness)
                {    
                    string name = String.Format( "[Magic] {0} Offset", StatType.Dex );
                    StatMod mod = from.GetStatMod( name );
                    
                    if ( mod != null && mod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, name, mod.Offset + -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( mod == null || mod.Offset < -10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, name, -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    
                    from.Paralyzed = false;
                    from.FixedParticles( 0x3779, 10, 15, 5002, EffectLayer.Head );
                    from.PlaySound( 0x1DF );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Feeblemindedness)
                {
                    string name = String.Format( "[Magic] {0} Offset", StatType.Int );
                    
                    StatMod mod = from.GetStatMod( name );
                    
                    if ( mod != null && mod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, name, mod.Offset + -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( mod == null || mod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, name, -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }

                    from.FixedParticles( 0x3779, 10, 15, 5004, EffectLayer.Head );
                    from.PlaySound( 0x1E4 );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Weakness)
                {
                    string name = String.Format( "[Magic] {0} Offset", StatType.Str );
                    
                    StatMod mod = from.GetStatMod( name );
                    
                    if ( mod != null && mod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, name, mod.Offset + -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( mod == null || mod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, name, -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }

                    from.FixedParticles( 0x3779, 10, 15, 5009, EffectLayer.Waist );
                    from.PlaySound( 0x1E6 );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Agility)
                {
                    string name = String.Format( "[Magic] {0} Offset", StatType.Dex );
                    
                    StatMod mod = from.GetStatMod( name );
                    
                    if ( mod != null && mod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, name, mod.Offset + 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( mod == null || mod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, name, 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }

                    from.FixedParticles( 0x375A, 10, 15, 5010, EffectLayer.Waist );
                    from.PlaySound( 0x28E );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Cunning)
                {
                    string name = String.Format( "[Magic] {0} Offset", StatType.Int );
                    
                    StatMod mod = from.GetStatMod( name );
                    
                    if ( mod != null && mod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, name, mod.Offset + 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( mod == null || mod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, name, 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }

                    from.FixedParticles( 0x375A, 10, 15, 5011, EffectLayer.Head );
                    from.PlaySound( 0x1EB );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Strength)
                {
                    string name = String.Format( "[Magic] {0} Offset", StatType.Str );
                    
                    StatMod mod = from.GetStatMod( name );
                    
                    if ( mod != null && mod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, name, mod.Offset + 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( mod == null || mod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, name, 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }

                    from.FixedParticles( 0x375A, 10, 15, 5017, EffectLayer.Waist );
                    from.PlaySound( 0x1EE );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Curses)
                {
                    string nameS = String.Format( "[Magic] {0} Offset", StatType.Str );
                    string nameD = String.Format( "[Magic] {0} Offset", StatType.Dex );
                    string nameI = String.Format( "[Magic] {0} Offset", StatType.Int );
                    StatMod strmod = from.GetStatMod( nameS );
                    StatMod dexmod = from.GetStatMod( nameD );
                    StatMod intmod = from.GetStatMod( nameI );
                    
                    if ( strmod != null && strmod.Offset > 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, nameS, strmod.Offset + -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( strmod == null || strmod.Offset > 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, nameS, -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    if ( dexmod != null && dexmod.Offset > 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, nameD, dexmod.Offset + -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( dexmod == null || dexmod.Offset > 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, nameD, -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    if ( intmod != null && intmod.Offset > 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, nameI, intmod.Offset + -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( intmod == null || intmod.Offset > 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, nameI, -10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }        
                    
                    from.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist );
                    from.PlaySound( 0x1EA );
                    MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.NightEyes)
                {
                        new LightCycle.NightSightTimer( from ).Start();

                        from.LightLevel = 26;

                        from.FixedParticles( 0x376A, 9, 32, 5007, EffectLayer.Waist );
                        from.PlaySound( 0x1E3 );
                        MagAffCharges --;
                }
                else if (m_PreUORMagAff == PreUORMagAff.Blessings)
                {
                    string nameS = String.Format( "[Magic] {0} Offset", StatType.Str );
                    string nameD = String.Format( "[Magic] {0} Offset", StatType.Dex );
                    string nameI = String.Format( "[Magic] {0} Offset", StatType.Int );
                    StatMod strmod = from.GetStatMod( nameS );
                    StatMod dexmod = from.GetStatMod( nameD );
                    StatMod intmod = from.GetStatMod( nameI );
                    
                    if ( strmod != null && strmod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, nameS, strmod.Offset + 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( strmod == null || strmod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Str, nameS, 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    if ( dexmod != null && dexmod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, nameD, dexmod.Offset + 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( dexmod == null || dexmod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Dex, nameD, 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    if ( intmod != null && intmod.Offset < 0 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, nameI, intmod.Offset + 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }
                    else if ( intmod == null || intmod.Offset < 10 )
                    {
                        from.AddStatMod( new StatMod( StatType.Int, nameI, 10, TimeSpan.FromSeconds( 60.0 ) ) );
                    }        
                    
                    from.FixedParticles( 0x373A, 10, 15, 5018, EffectLayer.Waist );
                    from.PlaySound( 0x1EA );;
                    MagAffCharges --;
                }
                
                else if (m_PreUORMagAff == PreUORMagAff.SpellReflection)
                {
                    if ( from.MagicDamageAbsorb >= 0 )
                    {
                        int value = 1;
                        from.MagicDamageAbsorb = value;
                    }
                    from.FixedParticles( 0x375A, 10, 15, 5037, EffectLayer.Waist );
                    from.PlaySound( 0x1E9 );
                }
                else if (m_PreUORMagAff == PreUORMagAff.Invisibility)
                {
                    Effects.SendLocationParticles( EffectItem.Create( new Point3D( from.X, from.Y, from.Z + 16 ), from.Map, EffectItem.DefaultDuration ), 0x376A, 10, 15, 5045 );
                    from.PlaySound( 0x3C4 );
                    from.Hidden = true;
                    MagAffCharges --;
                }
            }
            base.OnAdded( parent );
    
        }
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
        public override void OnRemoved( object parent )
        {
            Mobile mob = parent as Mobile;

            if ( mob != null )
            {
                //if ( Core.AOS )
                    m_AosSkillBonuses.Remove();

                string modName = this.Serial.ToString();

                mob.RemoveStatMod( modName + "Str" );
                mob.RemoveStatMod( modName + "Dex" );
                mob.RemoveStatMod( modName + "Int" );

                mob.CheckStatTimers();
            }
            
            //teleportation code can only be used by double clicking a ring (does not have to be worn) code for it is in ring.cs
            if (m_PreUORMagAff != PreUORMagAff.None && parent is Mobile)
            {
                Mobile from = (Mobile)parent;
                if (m_PreUORMagAff == PreUORMagAff.Invisibility)
                {
                    Effects.SendLocationParticles( EffectItem.Create( new Point3D( from.X, from.Y, from.Z + 16 ), from.Map, EffectItem.DefaultDuration ), 0x376A, 10, 15, 5045 );
                    from.PlaySound( 0x3C4 );
                    from.Hidden = false;
                }
            }
            base.OnRemoved( parent );
        }


        
        public virtual int OnHit( BaseWeapon weapon, int damageTaken )
        {
            int Absorbed = Utility.RandomMinMax( 1, 4 );

            damageTaken -= Absorbed;

            if ( damageTaken < 0 ) 
                damageTaken = 0;

            if ( 25 > Utility.Random( 100 ) ) // 25% chance to lower durability
            {
                if ( Core.AOS && m_AosClothingAttributes.SelfRepair > Utility.Random( 10 ) )
                {
                    HitPoints += 2;
                }
                else
                {
                    int wear;

                    if ( weapon.Type == WeaponType.Bashing )
                        wear = Absorbed / 2;
                    else
                        wear = Utility.Random( 2 );

                    if ( wear > 0 && m_MaxHitPoints > 0 )
                    {
                        if ( m_HitPoints >= wear )
                        {
                            HitPoints -= wear;
                            wear = 0;
                        }
                        else
                        {
                            wear -= HitPoints;
                            HitPoints = 0;
                        }

                        if ( wear > 0 )
                        {
                            if ( m_MaxHitPoints > wear )
                            {
                                MaxHitPoints -= wear;

                                if ( Parent is Mobile )
                                    ((Mobile)Parent).LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061121 ); // Your equipment is severely damaged.
                            }
                            else
                            {
                                Delete();
                            }
                        }
                    }
                }
            }

            return damageTaken;
        }

        public BaseClothing( int itemID, Layer layer ) : this( itemID, layer, 0 )
        {
        }

        public BaseClothing( int itemID, Layer layer, int hue ) : base( itemID )
        {
            Layer = layer;
            Hue = hue;

            m_Resource = DefaultResource;
            m_Quality = ClothingQuality.Regular;

            m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits );

            m_AosAttributes = new AosAttributes( this );
            m_AosClothingAttributes = new AosArmorAttributes( this );
            m_AosSkillBonuses = new AosSkillBonuses( this );
            m_AosResistances = new AosElementAttributes( this );
        }

        public override void OnAfterDuped( Item newItem )
        {
            BaseClothing clothing = newItem as BaseClothing;

            if ( clothing == null )
                return;

            clothing.m_AosAttributes = new AosAttributes( newItem, m_AosAttributes );
            clothing.m_AosResistances = new AosElementAttributes( newItem, m_AosResistances );
            clothing.m_AosSkillBonuses = new AosSkillBonuses( newItem, m_AosSkillBonuses );
            clothing.m_AosClothingAttributes = new AosArmorAttributes( newItem, m_AosClothingAttributes );
        }

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

        public override bool AllowEquipedCast( Mobile from )
        {
            if ( base.AllowEquipedCast( from ) )
                return true;

            return ( m_AosAttributes.SpellChanneling != 0 );
        }

        public void UnscaleDurability()
        {
            int scale = 100 + m_AosClothingAttributes.DurabilityBonus;

            m_HitPoints = ( ( m_HitPoints * 100 ) + ( scale - 1 ) ) / scale;
            m_MaxHitPoints = ( ( m_MaxHitPoints * 100 ) + ( scale - 1 ) ) / scale;

            InvalidateProperties();
        }

        public void ScaleDurability()
        {
            int scale = 100 + m_AosClothingAttributes.DurabilityBonus;

            m_HitPoints = ( ( m_HitPoints * scale ) + 99 ) / 100;
            m_MaxHitPoints = ( ( m_MaxHitPoints * scale ) + 99 ) / 100;

            InvalidateProperties();
        }

        public override bool CheckPropertyConfliction( Mobile m )
        {
            if ( base.CheckPropertyConfliction( m ) )
                return true;

            if ( Layer == Layer.Pants )
                return ( m.FindItemOnLayer( Layer.InnerLegs ) != null );

            if ( Layer == Layer.Shirt )
                return ( m.FindItemOnLayer( Layer.InnerTorso ) != null );

            return false;
        }

        private string GetNameString()
        {
            string name = this.Name;

            if ( name == null )
                name = String.Format( "#{0}", LabelNumber );

            return name;
        }

        public override void AddNameProperty( ObjectPropertyList list )
        {
            int oreType;

            switch ( m_Resource )
            {
                case CraftResource.DullCopper:        oreType = 1053108; break; // dull copper
                case CraftResource.ShadowIron:        oreType = 1053107; break; // shadow iron
                case CraftResource.Copper:            oreType = 1053106; break; // copper
                case CraftResource.Bronze:            oreType = 1053105; break; // bronze
                case CraftResource.Gold:            oreType = 1053104; break; // golden
                case CraftResource.Agapite:            oreType = 1053103; break; // agapite
                case CraftResource.Verite:            oreType = 1053102; break; // verite
                case CraftResource.Valorite:        oreType = 1053101; break; // valorite
                case CraftResource.SpinedLeather:    oreType = 1061118; break; // spined
                case CraftResource.HornedLeather:    oreType = 1061117; break; // horned
                case CraftResource.BarbedLeather:    oreType = 1061116; break; // barbed
                case CraftResource.RedScales:        oreType = 1060814; break; // red
                case CraftResource.YellowScales:    oreType = 1060818; break; // yellow
                case CraftResource.BlackScales:        oreType = 1060820; break; // black
                case CraftResource.GreenScales:        oreType = 1060819; break; // green
                case CraftResource.WhiteScales:        oreType = 1060821; break; // white
                case CraftResource.BlueScales:        oreType = 1060815; break; // blue
                default: oreType = 0; break;
            }

            if ( oreType != 0 )
                list.Add( 1053099, "#{0}\t{1}", oreType, GetNameString() ); // ~1_oretype~ ~2_armortype~
            else if ( Name == null )
                list.Add( LabelNumber );
            else
                list.Add( Name );
        }

        public override void GetProperties( ObjectPropertyList list )
        {
            base.GetProperties( list );

            if ( m_Crafter != null )
                list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~

            #region Factions
            if ( m_FactionState != null )
                list.Add( 1041350 ); // faction item
            #endregion

            if ( m_Quality == ClothingQuality.Exceptional )
                list.Add( 1060636 ); // exceptional

            if( RequiredRace == Race.Elf )
                list.Add( 1075086 ); // Elves Only

            if ( m_AosSkillBonuses != null )
                m_AosSkillBonuses.GetProperties( list );

            int prop;

            if ( (prop = ArtifactRarity) > 0 )
                list.Add( 1061078, prop.ToString() ); // artifact rarity ~1_val~

            if ( (prop = m_AosAttributes.WeaponDamage) != 0 )
                list.Add( 1060401, prop.ToString() ); // damage increase ~1_val~%

            if ( (prop = m_AosAttributes.DefendChance) != 0 )
                list.Add( 1060408, prop.ToString() ); // defense chance increase ~1_val~%

            if ( (prop = m_AosAttributes.BonusDex) != 0 )
                list.Add( 1060409, prop.ToString() ); // dexterity bonus ~1_val~

            if ( (prop = m_AosAttributes.EnhancePotions) != 0 )
                list.Add( 1060411, prop.ToString() ); // enhance potions ~1_val~%

            if ( (prop = m_AosAttributes.CastRecovery) != 0 )
                list.Add( 1060412, prop.ToString() ); // faster cast recovery ~1_val~

            if ( (prop = m_AosAttributes.CastSpeed) != 0 )
                list.Add( 1060413, prop.ToString() ); // faster casting ~1_val~

            if ( (prop = m_AosAttributes.AttackChance) != 0 )
                list.Add( 1060415, prop.ToString() ); // hit chance increase ~1_val~%

            if ( (prop = m_AosAttributes.BonusHits) != 0 )
                list.Add( 1060431, prop.ToString() ); // hit point increase ~1_val~

            if ( (prop = m_AosAttributes.BonusInt) != 0 )
                list.Add( 1060432, prop.ToString() ); // intelligence bonus ~1_val~

            if ( (prop = m_AosAttributes.LowerManaCost) != 0 )
                list.Add( 1060433, prop.ToString() ); // lower mana cost ~1_val~%

            if ( (prop = m_AosAttributes.LowerRegCost) != 0 )
                list.Add( 1060434, prop.ToString() ); // lower reagent cost ~1_val~%

            if ( (prop = m_AosClothingAttributes.LowerStatReq) != 0 )
                list.Add( 1060435, prop.ToString() ); // lower requirements ~1_val~%

            if ( (prop = m_AosAttributes.Luck) != 0 )
                list.Add( 1060436, prop.ToString() ); // luck ~1_val~

            if ( (prop = m_AosClothingAttributes.MageArmor) != 0 )
                list.Add( 1060437 ); // mage armor

            if ( (prop = m_AosAttributes.BonusMana) != 0 )
                list.Add( 1060439, prop.ToString() ); // mana increase ~1_val~

            if ( (prop = m_AosAttributes.RegenMana) != 0 )
                list.Add( 1060440, prop.ToString() ); // mana regeneration ~1_val~

            if ( (prop = m_AosAttributes.NightSight) != 0 )
                list.Add( 1060441 ); // night sight

            if ( (prop = m_AosAttributes.ReflectPhysical) != 0 )
                list.Add( 1060442, prop.ToString() ); // reflect physical damage ~1_val~%

            if ( (prop = m_AosAttributes.RegenStam) != 0 )
                list.Add( 1060443, prop.ToString() ); // stamina regeneration ~1_val~

            if ( (prop = m_AosAttributes.RegenHits) != 0 )
                list.Add( 1060444, prop.ToString() ); // hit point regeneration ~1_val~

            if ( (prop = m_AosClothingAttributes.SelfRepair) != 0 )
                list.Add( 1060450, prop.ToString() ); // self repair ~1_val~

            if ( (prop = m_AosAttributes.SpellChanneling) != 0 )
                list.Add( 1060482 ); // spell channeling

            if ( (prop = m_AosAttributes.SpellDamage) != 0 )
                list.Add( 1060483, prop.ToString() ); // spell damage increase ~1_val~%

            if ( (prop = m_AosAttributes.BonusStam) != 0 )
                list.Add( 1060484, prop.ToString() ); // stamina increase ~1_val~

            if ( (prop = m_AosAttributes.BonusStr) != 0 )
                list.Add( 1060485, prop.ToString() ); // strength bonus ~1_val~

            if ( (prop = m_AosAttributes.WeaponSpeed) != 0 )
                list.Add( 1060486, prop.ToString() ); // swing speed increase ~1_val~%

            base.AddResistanceProperties( list );

            if ( (prop = m_AosClothingAttributes.DurabilityBonus) > 0 )
                list.Add( 1060410, prop.ToString() ); // durability ~1_val~%

            if ( (prop = ComputeStatReq( StatType.Str )) > 0 )
                list.Add( 1061170, prop.ToString() ); // strength requirement ~1_val~

            if ( m_HitPoints >= 0 && m_MaxHitPoints > 0 )
                list.Add( 1060639, "{0}\t{1}", m_HitPoints, m_MaxHitPoints ); // durability ~1_val~ / ~2_val~
        }

        public override void OnSingleClick( Mobile from )
        {
            List<EquipInfoAttribute> attrs = new List<EquipInfoAttribute>();

            AddEquipInfoAttributes( from, attrs );

            int number;

            if ( Name == null )
            {
                number = LabelNumber;
            }
            else
            {
                this.LabelTo( from, Name );
                number = 1041000;
            }

            if ( attrs.Count == 0 && Crafter == null && Name != null )
                return;

            EquipmentInfo eqInfo = new EquipmentInfo( number, m_Crafter, false, attrs.ToArray() );
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            StringBuilder clothinfo = new StringBuilder();
            string clothname = this.ItemData.Name;
            string magaff = "";
            if ( eqInfo.Crafter != null )
            {
                string crafter = eqInfo.Crafter.Name;
                clothinfo.AppendFormat( "an exceptional {0} crafted by {1}", clothname, crafter );
            }
            else if (m_Quality == ClothingQuality.Exceptional)
                clothinfo.AppendFormat( "an exceptional {0}", clothname );
            else
                clothinfo.AppendFormat( "a {0}", clothname );
            if ( m_Identified )
            {
            if ( m_PreUORMagAff != PreUORMagAff.None )
                {
                    switch( (int)m_PreUORMagAff )
                    {
                        case 1:
                            magaff = " clumsiness";
                            break;
                        case 2:
                            magaff = " feeblemindness";
                            break;
                        case 3:
                            magaff = " weakness";
                            break;
                        case 4:
                            magaff = " agility";
                            break;
                        case 5:
                            magaff = " cunning";
                            break;
                        case 6:
                            magaff = " strength";
                            break;
                        case 7:
                            magaff = " curses";
                            break;
                        case 8:
                            magaff = " night sight";
                            break;
                        case 9:
                            magaff = " blessings";
                            break;
                        case 10:
                            magaff = " spell reflection";
                            break;
                        case 11:
                            magaff = " invisibility";
                            break;
                                                 
                    }
                }
                //clothinfo = new StringBuilder();
                if ( m_PreUORMagAff != PreUORMagAff.None )
                    clothinfo.AppendFormat( " of {0}{1}", magaff, MagAffCharges  );
            }        
            else if ( m_PreUORMagAff != PreUORMagAff.None )
            {
                string magic = " magic";
                clothinfo.Insert( 1, magic );
            }
            if ( DisplayLootType )
            {
                if ( LootType == LootType.Blessed )
                    clothinfo.Append( " [Blessed]" );
                else if ( LootType == LootType.Cursed )
                    clothinfo.Append( " [Cursed]" );
            }

            this.LabelTo( from, "{0}", clothinfo );
        }
            //from.Send( new DisplayEquipmentInfo( this, eqInfo ) );
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


        public virtual void AddEquipInfoAttributes( Mobile from, List<EquipInfoAttribute> attrs )
        {
            if ( DisplayLootType )
            {
                if ( LootType == LootType.Blessed )
                    attrs.Add( new EquipInfoAttribute( 1038021 ) ); // blessed
                else if ( LootType == LootType.Cursed )
                    attrs.Add( new EquipInfoAttribute( 1049643 ) ); // cursed
            }

            #region Factions
            if ( m_FactionState != null )
                attrs.Add( new EquipInfoAttribute( 1041350 ) ); // faction item
            #endregion

            if ( m_Quality == ClothingQuality.Exceptional )
                attrs.Add( new EquipInfoAttribute( 1018305 - (int)m_Quality ) );
        }

        #region Serialization
        private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
        {
            if ( setIf )
                flags |= toSet;
        }

        private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
        {
            return ( (flags & toGet) != 0 );
        }

        [Flags]
        private enum SaveFlag
        {
            None = 0x00000000,
            Resource = 0x00000001,
            Attributes = 0x00000002,
            ClothingAttributes = 0x00000004,
            SkillBonuses = 0x00000008,
            Resistances = 0x00000010,
            MaxHitPoints = 0x00000020,
            HitPoints = 0x00000040,
            PlayerConstructed = 0x00000080,
            Crafter = 0x00000100,
            Quality = 0x00000200,
            StrReq = 0x00000400,
            Identified = 0x00000001,
            MagicAffect = 0x00000002,
            AffectCharges = 0x00000004
        }
        

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 5 ); // version

            SaveFlag flags = SaveFlag.None;

            SetSaveFlag( ref flags, SaveFlag.Resource,            m_Resource != DefaultResource );
            SetSaveFlag( ref flags, SaveFlag.Attributes,        !m_AosAttributes.IsEmpty );
            SetSaveFlag( ref flags, SaveFlag.ClothingAttributes,!m_AosClothingAttributes.IsEmpty );
            SetSaveFlag( ref flags, SaveFlag.SkillBonuses,        !m_AosSkillBonuses.IsEmpty );
            SetSaveFlag( ref flags, SaveFlag.Resistances,        !m_AosResistances.IsEmpty );
            SetSaveFlag( ref flags, SaveFlag.MaxHitPoints,        m_MaxHitPoints != 0 );
            SetSaveFlag( ref flags, SaveFlag.HitPoints,            m_HitPoints != 0 );
            SetSaveFlag( ref flags, SaveFlag.PlayerConstructed,    m_PlayerConstructed != false );
            SetSaveFlag( ref flags, SaveFlag.Crafter,            m_Crafter != null );
            SetSaveFlag( ref flags, SaveFlag.Quality,            m_Quality != ClothingQuality.Regular );
            SetSaveFlag( ref flags, SaveFlag.StrReq,            m_StrReq != -1 );

            ////////////////////////////////////////////////////////////////////////////////////////////////
            SetSaveFlag(ref flags, SaveFlag.MagicAffect,        m_PreUORMagAff != PreUORMagAff.None);
            SetSaveFlag(ref flags, SaveFlag.AffectCharges,      MagAffCharges != 0);
            SetSaveFlag(ref flags, SaveFlag.Identified, m_Identified != false);
            ////////////////////////////////////////////////////////////////////////////////////////////////
            writer.WriteEncodedInt( (int) flags );
////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if (GetSaveFlag(flags, SaveFlag.Identified))
                writer.Write((bool)m_Identified);

            if (GetSaveFlag(flags, SaveFlag.MagicAffect))
                writer.Write((int)m_PreUORMagAff);

            if (GetSaveFlag(flags, SaveFlag.AffectCharges))
                writer.Write((int)MagAffCharges);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if ( GetSaveFlag( flags, SaveFlag.Resource ) )
                writer.WriteEncodedInt( (int) m_Resource );

            if ( GetSaveFlag( flags, SaveFlag.Attributes ) )
                m_AosAttributes.Serialize( writer );

            if ( GetSaveFlag( flags, SaveFlag.ClothingAttributes ) )
                m_AosClothingAttributes.Serialize( writer );

            if ( GetSaveFlag( flags, SaveFlag.SkillBonuses ) )
                m_AosSkillBonuses.Serialize( writer );

            if ( GetSaveFlag( flags, SaveFlag.Resistances ) )
                m_AosResistances.Serialize( writer );

            if ( GetSaveFlag( flags, SaveFlag.MaxHitPoints ) )
                writer.WriteEncodedInt( (int) m_MaxHitPoints );

            if ( GetSaveFlag( flags, SaveFlag.HitPoints ) )
                writer.WriteEncodedInt( (int) m_HitPoints );

            if ( GetSaveFlag( flags, SaveFlag.Crafter ) )
                writer.Write( (Mobile) m_Crafter );

            if ( GetSaveFlag( flags, SaveFlag.Quality ) )
                writer.WriteEncodedInt( (int) m_Quality );

            if ( GetSaveFlag( flags, SaveFlag.StrReq ) )
                writer.WriteEncodedInt( (int) m_StrReq );
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            switch ( version )
            {
                case 5:
                {
                    SaveFlag flags = (SaveFlag)reader.ReadEncodedInt();
/////////////////////////////////////////////////////////////////////////////////////////////
                    if (GetSaveFlag(flags, SaveFlag.Identified))
                        m_Identified = reader.ReadBool();

                    if (GetSaveFlag(flags, SaveFlag.MagicAffect))
                        m_PreUORMagAff = (PreUORMagAff)reader.ReadInt();

                    if (GetSaveFlag(flags, SaveFlag.AffectCharges))
                        MagAffCharges = reader.ReadInt();
/////////////////////////////////////////////////////////////////////////////////////////////
                    if ( GetSaveFlag( flags, SaveFlag.Resource ) )
                        m_Resource = (CraftResource)reader.ReadEncodedInt();
                    else
                        m_Resource = DefaultResource;

                    if ( GetSaveFlag( flags, SaveFlag.Attributes ) )
                        m_AosAttributes = new AosAttributes( this, reader );
                    else
                        m_AosAttributes = new AosAttributes( this );

                    if ( GetSaveFlag( flags, SaveFlag.ClothingAttributes ) )
                        m_AosClothingAttributes = new AosArmorAttributes( this, reader );
                    else
                        m_AosClothingAttributes = new AosArmorAttributes( this );

                    if ( GetSaveFlag( flags, SaveFlag.SkillBonuses ) )
                        m_AosSkillBonuses = new AosSkillBonuses( this, reader );
                    else
                        m_AosSkillBonuses = new AosSkillBonuses( this );

                    if ( GetSaveFlag( flags, SaveFlag.Resistances ) )
                        m_AosResistances = new AosElementAttributes( this, reader );
                    else
                        m_AosResistances = new AosElementAttributes( this );

                    if ( GetSaveFlag( flags, SaveFlag.MaxHitPoints ) )
                        m_MaxHitPoints = reader.ReadEncodedInt();

                    if ( GetSaveFlag( flags, SaveFlag.HitPoints ) )
                        m_HitPoints = reader.ReadEncodedInt();

                    if ( GetSaveFlag( flags, SaveFlag.Crafter ) )
                        m_Crafter = reader.ReadMobile();

                    if ( GetSaveFlag( flags, SaveFlag.Quality ) )
                        m_Quality = (ClothingQuality)reader.ReadEncodedInt();
                    else
                        m_Quality = ClothingQuality.Regular;

                    if ( GetSaveFlag( flags, SaveFlag.StrReq ) )
                        m_StrReq = reader.ReadEncodedInt();
                    else
                        m_StrReq = -1;

                    if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) )
                        m_PlayerConstructed = true;

                    break;
                }
                case 4:
                {
                    m_Resource = (CraftResource)reader.ReadInt();

                    goto case 3;
                }
                case 3:
                {
                    m_AosAttributes = new AosAttributes( this, reader );
                    m_AosClothingAttributes = new AosArmorAttributes( this, reader );
                    m_AosSkillBonuses = new AosSkillBonuses( this, reader );
                    m_AosResistances = new AosElementAttributes( this, reader );

                    goto case 2;
                }
                case 2:
                {
                    m_PlayerConstructed = reader.ReadBool();
                    goto case 1;
                }
                case 1:
                {
                    m_Crafter = reader.ReadMobile();
                    m_Quality = (ClothingQuality)reader.ReadInt();
                    break;
                }
                case 0:
                {
                    m_Crafter = null;
                    m_Quality = ClothingQuality.Regular;
                    break;
                }
            }

            if ( version < 2 )
                m_PlayerConstructed = true; // we don't know, so, assume it's crafted

            if ( version < 3 )
            {
                m_AosAttributes = new AosAttributes( this );
                m_AosClothingAttributes = new AosArmorAttributes( this );
                m_AosSkillBonuses = new AosSkillBonuses( this );
                m_AosResistances = new AosElementAttributes( this );
            }

            if ( version < 4 )
                m_Resource = DefaultResource;

            if ( m_MaxHitPoints == 0 && m_HitPoints == 0 )
                m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits );

            Mobile parent = Parent as Mobile;

            if ( parent != null )
            {
                if ( Core.AOS )
                    m_AosSkillBonuses.AddTo( parent );

                AddStatBonuses( parent );
                parent.CheckStatTimers();
            }
        }
        #endregion

        public virtual bool Dye( Mobile from, DyeTub sender )
        {
            if ( Deleted )
                return false;
            else if ( RootParent is Mobile && from != RootParent )
                return false;

            Hue = sender.DyedHue;

            return true;
        }

        public virtual bool Scissor( Mobile from, Scissors scissors )
        {
            if ( !IsChildOf( from.Backpack ) )
            {
                from.SendLocalizedMessage( 502437 ); // 
                //from.Send(new AsciiMessage(Serial.Zero, 0, MessageType.Regular, 0x47e, 8, null, "Items you wish to cut must be in your backpack."));
                //return false;
            }

            if ( Ethics.Ethic.IsImbued( this ) )
            {
                from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
                return false;
            }

            CraftSystem system = DefTailoring.CraftSystem;

            CraftItem item = system.CraftItems.SearchFor( GetType() );

            if ( item != null && item.Resources.Count == 1 && item.Resources.GetAt( 0 ).Amount >= 2 )
            {
                try
                {
                    Type resourceType = null;

                    CraftResourceInfo info = CraftResources.GetInfo( m_Resource );

                    if ( info != null && info.ResourceTypes.Length > 0 )
                        resourceType = info.ResourceTypes[0];

                    if ( resourceType == null )
                        resourceType = item.Resources.GetAt( 0 ).ItemType;

                    Item res = (Item)Activator.CreateInstance( resourceType );

                    ScissorHelper( from, res, m_PlayerConstructed ? (item.Resources.GetAt( 0 ).Amount / 2) : 1 );

                    res.LootType = LootType.Regular;

                    return true;
                }
                catch
                {
                }
            }

            from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
            return false;
        }

        public void DistributeBonuses( int amount )
        {
            for ( int i = 0; i < amount; ++i )
            {
                switch ( Utility.Random( 5 ) )
                {
                    case 0: ++m_AosResistances.Physical; break;
                    case 1: ++m_AosResistances.Fire; break;
                    case 2: ++m_AosResistances.Cold; break;
                    case 3: ++m_AosResistances.Poison; break;
                    case 4: ++m_AosResistances.Energy; break;
                }
            }

            InvalidateProperties();
        }

        #region ICraftable Members

        public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
        {
            Quality = (ClothingQuality)quality;

            if ( makersMark )
                Crafter = from;

            if ( DefaultResource != CraftResource.None )
            {
                Type resourceType = typeRes;

                if ( resourceType == null )
                    resourceType = craftItem.Resources.GetAt( 0 ).ItemType;

                Resource = CraftResources.GetFromType( resourceType );
            }
            else
            {
                Hue = resHue;
            }

            PlayerConstructed = true;

            CraftContext context = craftSystem.GetContext( from );

            if ( context != null && context.DoNotColor )
                Hue = 0;

            return quality;
        }

        #endregion
    }
}
__________________
mehoo is online now   Reply With Quote
Old 12-01-2009, 04:14 PM   #2 (permalink)
Master of the Internet
 
Lord_Greywolf's Avatar
 
Join Date: Dec 2005
Posts: 12,182
Send a message via Yahoo to Lord_Greywolf
Default

there is a sticky about serial/deserizing, it is a great thing to read

you have to make sure they are in the EXACT same order, and to get the versioning cown correctly
(wrong versioning will just delete them once, then after a save and restart will stay - which on an "empty" shard is no problem
wrong order will never work correctly)
__________________
http://www.AoAUO.com

:) ..... Come for the Customs, Play for the Fun. Return to see your new Friends ..... :)
Lord_Greywolf is offline   Reply With Quote
Old 12-01-2009, 05:34 PM   #3 (permalink)
Forum Novice
 
mehoo's Avatar
 
Join Date: Aug 2006
Location: SLC Utah
Posts: 335
Default

Ok, I went and looked through the code again and found a problem, the numbers in red are the same, but I don't know what numbers I should use for the bottom three. does it need to be a certain number that follows a pattern or can it just be any number not yet being used?

Code:
None = 0x00000000,
            Resource = 0x00000001,
            Attributes = 0x00000002,
            ClothingAttributes = 0x00000004,
            SkillBonuses = 0x00000008,
            Resistances = 0x00000010,
            MaxHitPoints = 0x00000020,
            HitPoints = 0x00000040,
            PlayerConstructed = 0x00000080,
            Crafter = 0x00000100,
            Quality = 0x00000200,
            StrReq = 0x00000400,
            Identified = 0x00000001,
            MagicAffect = 0x00000002,
            AffectCharges = 0x00000004
__________________
mehoo is online now   Reply With Quote
Old 12-01-2009, 05:47 PM   #4 (permalink)
Forum Expert
 
Murzin's Avatar
 
Join Date: Nov 2004
Posts: 2,190
Send a message via AIM to Murzin
Default

looks like bad file merging or you followed an out of date system

best bet would be to download the distro scripts, find out what that says those flags should be, and go from there.
Murzin is offline   Reply With Quote
Old 12-01-2009, 06:12 PM   #5 (permalink)
Master of the Internet
 
Lord_Greywolf's Avatar
 
Join Date: Dec 2005
Posts: 12,182
Send a message via Yahoo to Lord_Greywolf
Default

those are base hex numbers and yes they have to go up correctly
with that you had, you where reasigning number over previous numbers
try these instead

i also modified the spacing to make it easier to read them and the pattern

Code:
None = 0x00000000,
            Resource =		0x00000001,
            Attributes =		0x00000002,
            ClothingAttributes =	0x00000004,
            SkillBonuses =		0x00000008,
            Resistances =		0x00000010,
            MaxHitPoints =	0x00000020,
            HitPoints =		0x00000040,
            PlayerConstructed =	0x00000080,
            Crafter =		0x00000100,
            Quality =		0x00000200,
            StrReq =		0x00000400,
            Identified =		0x00000800,
            MagicAffect =		0x00001000,
            AffectCharges =	0x00002000
__________________
http://www.AoAUO.com

:) ..... Come for the Customs, Play for the Fun. Return to see your new Friends ..... :)

Last edited by Lord_Greywolf; 12-01-2009 at 06:14 PM.
Lord_Greywolf is offline   Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off



Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0 RC5