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

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

            writer.Write( m_EffectDelay );
            writer.Write( m_TriggerDelay );
            writer.Write( m_SoundDelay );

            writer.WriteEntity( m_Source );
            writer.WriteEntity( m_Target );

            /*
            if ( m_Source is Item )
                writer.Write( m_Source as Item );
            else
                writer.Write( m_Source as Mobile );

            if ( m_Target is Item )
                writer.Write( m_Target as Item );
            else
                writer.Write( m_Target as Mobile );
            */
            writer.Write( m_Trigger as Item );

            writer.Write( m_FixedDirection );
            writer.Write( m_Explodes );
            writer.Write( m_PlaySoundAtTrigger );

            writer.WriteEncodedInt( (int) m_EffectType );
            writer.WriteEncodedInt( (int) m_EffectLayer );
            writer.WriteEncodedInt( (int) m_TriggerType );

            writer.WriteEncodedInt( m_ItemID );
            writer.WriteEncodedInt( m_Hue );
            writer.WriteEncodedInt( m_RenderMode );
            writer.WriteEncodedInt( m_Speed );
            writer.WriteEncodedInt( m_Duration );
            writer.WriteEncodedInt( m_ParticleEffect );
            writer.WriteEncodedInt( m_ExplodeParticleEffect );
            writer.WriteEncodedInt( m_ExplodeSound );
            writer.WriteEncodedInt( m_Unknown );
            writer.WriteEncodedInt( m_SoundID );
            writer.WriteEncodedInt( m_TriggerRange );
        }