diff --git a/Scripts/Misc/ToggleItem.cs b/Scripts/Misc/ToggleItem.cs new file mode 100644 index 000000000..e1898163d --- /dev/null +++ b/Scripts/Misc/ToggleItem.cs @@ -0,0 +1,131 @@ +using System; +using Server; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Items +{ + public class ToggleItem : Item + { + public class ToggleCommand : BaseCommand + { + public ToggleCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllItems; + Commands = new string[]{ "Toggle" }; + ObjectTypes = ObjectTypes.Items; + Usage = "Toggle"; + Description = "Toggles a targeted ToggleItem."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( obj is ToggleItem ) + { + ((ToggleItem)obj).Toggle(); + AddResponse( "The item has been toggled." ); + } + else + { + LogFailure( "That is not a ToggleItem." ); + } + } + } + + public static void Initialize() + { + TargetCommands.Register( new ToggleCommand() ); + } + + private int m_InactiveItemID; + private int m_ActiveItemID; + private bool m_PlayersCanToggle; + + [CommandProperty( AccessLevel.GameMaster )] + public int InactiveItemID + { + get { return m_InactiveItemID; } + set { m_InactiveItemID = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ActiveItemID + { + get { return m_ActiveItemID; } + set { m_ActiveItemID = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool PlayersCanToggle + { + get { return m_PlayersCanToggle; } + set { m_PlayersCanToggle = value; } + } + + [Constructable] + public ToggleItem( int inactiveItemID, int activeItemID ) + : this( inactiveItemID, activeItemID, false ) + { + } + + [Constructable] + public ToggleItem( int inactiveItemID, int activeItemID, bool playersCanToggle ) + : base( inactiveItemID ) + { + Movable = false; + + m_InactiveItemID = inactiveItemID; + m_ActiveItemID = activeItemID; + m_PlayersCanToggle = playersCanToggle; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + Toggle(); + } + else if ( m_PlayersCanToggle ) + { + if ( from.InRange( GetWorldLocation(), 1 ) ) + Toggle(); + else + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + } + + public void Toggle() + { + ItemID = ( ItemID == m_ActiveItemID ) ? m_InactiveItemID : m_ActiveItemID; + Visible = ( ItemID != 0x1 ); + } + + public ToggleItem( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_InactiveItemID ); + writer.Write( m_ActiveItemID ); + writer.Write( m_PlayersCanToggle ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_InactiveItemID = reader.ReadInt(); + m_ActiveItemID = reader.ReadInt(); + m_PlayersCanToggle = reader.ReadBool(); + } + } +}