public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 9 ); // version
SaveFlag flags = SaveFlag.None;
SetSaveFlag( ref flags, SaveFlag.DamageLevel, m_DamageLevel != WeaponDamageLevel.Regular );
SetSaveFlag( ref flags, SaveFlag.AccuracyLevel, m_AccuracyLevel != WeaponAccuracyLevel.Regular );
SetSaveFlag( ref flags, SaveFlag.DurabilityLevel, m_DurabilityLevel != WeaponDurabilityLevel.Regular );
SetSaveFlag( ref flags, SaveFlag.Quality, m_Quality != WeaponQuality.Regular );
SetSaveFlag( ref flags, SaveFlag.Hits, m_Hits != 0 );
SetSaveFlag( ref flags, SaveFlag.MaxHits, m_MaxHits != 0 );
SetSaveFlag( ref flags, SaveFlag.Slayer, m_Slayer != SlayerName.None );
SetSaveFlag( ref flags, SaveFlag.Poison, m_Poison != null );
SetSaveFlag( ref flags, SaveFlag.PoisonCharges, m_PoisonCharges != 0 );
SetSaveFlag( ref flags, SaveFlag.Crafter, m_Crafter != null );
SetSaveFlag( ref flags, SaveFlag.Identified, m_Identified != false );
SetSaveFlag( ref flags, SaveFlag.StrReq, m_StrReq != -1 );
SetSaveFlag( ref flags, SaveFlag.DexReq, m_DexReq != -1 );
SetSaveFlag( ref flags, SaveFlag.IntReq, m_IntReq != -1 );
SetSaveFlag( ref flags, SaveFlag.MinDamage, m_MinDamage != -1 );
SetSaveFlag( ref flags, SaveFlag.MaxDamage, m_MaxDamage != -1 );
SetSaveFlag( ref flags, SaveFlag.HitSound, m_HitSound != -1 );
SetSaveFlag( ref flags, SaveFlag.MissSound, m_MissSound != -1 );
SetSaveFlag( ref flags, SaveFlag.Speed, m_Speed != -1 );
SetSaveFlag( ref flags, SaveFlag.MaxRange, m_MaxRange != -1 );
SetSaveFlag( ref flags, SaveFlag.Skill, m_Skill != (SkillName)(-1) );
SetSaveFlag( ref flags, SaveFlag.Type, m_Type != (WeaponType)(-1) );
SetSaveFlag( ref flags, SaveFlag.Animation, m_Animation != (WeaponAnimation)(-1) );
SetSaveFlag( ref flags, SaveFlag.Resource, m_Resource != CraftResource.Iron );
SetSaveFlag( ref flags, SaveFlag.PlayerConstructed, m_PlayerConstructed );
SetSaveFlag( ref flags, SaveFlag.Slayer2, m_Slayer2 != SlayerName.None );
SetSaveFlag( ref flags, SaveFlag.EngravedText, !String.IsNullOrEmpty( m_EngravedText ) );
writer.Write( (int) flags );
if ( GetSaveFlag( flags, SaveFlag.DamageLevel ) )
writer.Write( (int) m_DamageLevel );
if ( GetSaveFlag( flags, SaveFlag.AccuracyLevel ) )
writer.Write( (int) m_AccuracyLevel );
if ( GetSaveFlag( flags, SaveFlag.DurabilityLevel ) )
writer.Write( (int) m_DurabilityLevel );
if ( GetSaveFlag( flags, SaveFlag.Quality ) )
writer.Write( (int) m_Quality );
if ( GetSaveFlag( flags, SaveFlag.Hits ) )
writer.Write( (int) m_Hits );
if ( GetSaveFlag( flags, SaveFlag.MaxHits ) )
writer.Write( (int) m_MaxHits );
if ( GetSaveFlag( flags, SaveFlag.Slayer ) )
writer.Write( (int) m_Slayer );
if ( GetSaveFlag( flags, SaveFlag.Poison ) )
Poison.Serialize( m_Poison, writer );
if ( GetSaveFlag( flags, SaveFlag.PoisonCharges ) )
writer.Write( (int) m_PoisonCharges );
if ( GetSaveFlag( flags, SaveFlag.Crafter ) )
writer.Write( (Mobile) m_Crafter );
if ( GetSaveFlag( flags, SaveFlag.StrReq ) )
writer.Write( (int) m_StrReq );
if ( GetSaveFlag( flags, SaveFlag.DexReq ) )
writer.Write( (int) m_DexReq );
if ( GetSaveFlag( flags, SaveFlag.IntReq ) )
writer.Write( (int) m_IntReq );
if ( GetSaveFlag( flags, SaveFlag.MinDamage ) )
writer.Write( (int) m_MinDamage );
if ( GetSaveFlag( flags, SaveFlag.MaxDamage ) )
writer.Write( (int) m_MaxDamage );
if ( GetSaveFlag( flags, SaveFlag.HitSound ) )
writer.Write( (int) m_HitSound );
if ( GetSaveFlag( flags, SaveFlag.MissSound ) )
writer.Write( (int) m_MissSound );
if ( GetSaveFlag( flags, SaveFlag.Speed ) )
writer.Write( (float) m_Speed );
if ( GetSaveFlag( flags, SaveFlag.MaxRange ) )
writer.Write( (int) m_MaxRange );
if ( GetSaveFlag( flags, SaveFlag.Skill ) )
writer.Write( (int) m_Skill );
if ( GetSaveFlag( flags, SaveFlag.Type ) )
writer.Write( (int) m_Type );
if ( GetSaveFlag( flags, SaveFlag.Animation ) )
writer.Write( (int) m_Animation );
if ( GetSaveFlag( flags, SaveFlag.Resource ) )
writer.Write( (int) m_Resource );
if ( GetSaveFlag( flags, SaveFlag.Slayer2 ) )
writer.Write( (int)m_Slayer2 );
if( GetSaveFlag( flags, SaveFlag.EngravedText ) )
writer.Write( (string) m_EngravedText );
}