using System; using Server.Mobiles; namespace Server.Items { [Flipable( 0x028F, 0x0290 )] public class FireColumnTrap : BaseTrap { [Constructable] public FireColumnTrap() : base( 0x028F ) { Name = "fire trap"; m_MinDamage = 10; m_MaxDamage = 40; m_WarningFlame = true; } public override bool PassivelyTriggered{ get{ return true; } } public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.FromSeconds( 2.0 ); } } public override int PassiveTriggerRange{ get{ return 3; } } public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 0.5 ); } } private int m_MinDamage; [CommandProperty( AccessLevel.GameMaster )] public virtual int MinDamage { get { return m_MinDamage; } set { m_MinDamage = value; } } private int m_MaxDamage; [CommandProperty( AccessLevel.GameMaster )] public virtual int MaxDamage { get { return m_MaxDamage; } set { m_MaxDamage = value; } } private bool m_WarningFlame; [CommandProperty( AccessLevel.GameMaster )] public virtual bool WarningFlame { get { return m_WarningFlame; } set { m_WarningFlame = value; } } public override void OnTrigger( Mobile from ) { base.OnTrigger( from ); if ( WarningFlame ) DoEffect(); if ( from.Alive && CheckRange( from.Location, 0 ) ) { Spells.SpellHelper.Damage( TimeSpan.FromSeconds( 0.5 ), from, from, Utility.RandomMinMax( MinDamage, MaxDamage ) ); if ( !WarningFlame ) DoEffect(); } } private void DoEffect() { Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x3709, 10, 30, 5052 ); Effects.PlaySound( Location, Map, 0x225 ); } public FireColumnTrap( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 1 ); // version writer.Write( m_WarningFlame ); writer.Write( m_MinDamage ); writer.Write( m_MaxDamage ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 1: { m_WarningFlame = reader.ReadBool(); m_MinDamage = reader.ReadInt(); m_MaxDamage = reader.ReadInt(); break; } } if ( version == 0 ) { m_WarningFlame = true; m_MinDamage = 10; m_MaxDamage = 40; } } } }