using System; using Server; using Server.Network; using Server.Mobiles; namespace Server.Items { public enum StoneFaceTrapType { NorthWestWall, NorthWall, WestWall } public class StoneFaceTrap : BaseTrap { [CommandProperty( AccessLevel.GameMaster )] public StoneFaceTrapType Type { get { switch ( ItemID ) { case 0x10F5: case 0x10F6: case 0x10F7: return StoneFaceTrapType.NorthWestWall; case 0x10FC: case 0x10FD: case 0x10FE: return StoneFaceTrapType.NorthWall; case 0x110F: case 0x1110: case 0x1111: return StoneFaceTrapType.WestWall; } return StoneFaceTrapType.NorthWestWall; } set { bool breathing = this.Breathing; ItemID = ( breathing ? GetFireID( value ) : GetBaseID( value ) ); } } public bool Breathing { get{ return ( ItemID == GetFireID( this.Type ) ); } set { if ( value ) ItemID = GetFireID( this.Type ); else ItemID = GetBaseID( this.Type ); } } public static int GetBaseID( StoneFaceTrapType type ) { switch ( type ) { case StoneFaceTrapType.NorthWestWall: return 0x10F5; case StoneFaceTrapType.NorthWall: return 0x10FC; case StoneFaceTrapType.WestWall: return 0x110F; } return 0; } public static int GetFireID( StoneFaceTrapType type ) { switch ( type ) { case StoneFaceTrapType.NorthWestWall: return 0x10F7; case StoneFaceTrapType.NorthWall: return 0x10FE; case StoneFaceTrapType.WestWall: return 0x1111; } return 0; } [Constructable] public StoneFaceTrap() : base( 0x10FC ) { Light = LightType.Circle225; } public override bool PassivelyTriggered{ get{ return true; } } public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } public override int PassiveTriggerRange{ get{ return 2; } } public override TimeSpan ResetDelay{ get{ return TimeSpan.Zero; } } public override void OnTrigger( Mobile from ) { base.OnTrigger( from ); Effects.PlaySound( Location, Map, 0x359 ); Breathing = true; Timer.DelayCall( TimeSpan.FromSeconds( 2.0 ), new TimerCallback( FinishBreath ) ); Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( TriggerDamage ) ); } public virtual void FinishBreath() { Breathing = false; } public virtual void TriggerDamage() { foreach ( Mobile mob in GetMobilesInRange( 1 ) ) { if ( mob.Alive && !mob.IsDeadBondedPet && mob.AccessLevel == AccessLevel.Player ) Spells.SpellHelper.Damage( TimeSpan.FromTicks( 1 ), mob, mob, Utility.Dice( 3, 15, 0 ) ); } } public StoneFaceTrap( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); Breathing = false; } } public class StoneFaceTrapNoDamage : StoneFaceTrap { [Constructable] public StoneFaceTrapNoDamage() { } public StoneFaceTrapNoDamage( Serial serial ) : base( serial ) { } public override void TriggerDamage() { // nothing.. } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } }