using Server.ContextMenus; using System; using Server; using Server.Targeting; using Server.Network; using Server.Mobiles; using System.Collections; using Server.Items; using Server.Misc; namespace Server.Items { public class PetSummonBall : Item { public Mobile m_linked; public bool Linked; public int m_charges; [Constructable] public PetSummonBall() : base(0xE2E) { Weight = 1.0; Movable = true; this.Linked = false; m_charges=10; Name= "a crystal ball of pet summoning: [Charges: "+m_charges+"]"; } [CommandProperty( AccessLevel.GameMaster )] public Mobile LinkedPet { get { return m_linked; } set { m_linked = value; InvalidateProperties(); } } [CommandProperty( AccessLevel.GameMaster )] public int Charges { get { return m_charges; } set { m_charges = value; InvalidateProperties(); } } public PetSummonBall( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 1 ); writer.Write( (Mobile) m_linked ); writer.Write( (bool) Linked ); writer.Write( (int) m_charges ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 1: { m_linked = reader.ReadMobile(); Linked = reader.ReadBool(); m_charges = reader.ReadInt(); goto case 0; } case 0: break; } } public override void OnDoubleClick( Mobile from ) { BaseCreature m_Summon = m_linked as BaseCreature; if(m_Summon==null) { this.SendLocalizedMessageTo(from, 1054114); from.Target = new LinkTarget( this ); } else if (from.Stabled.Contains( m_Summon) && m_charges !=0) { if ( (from.Followers + m_Summon.ControlSlots) <= from.FollowersMax ) { this.SendLocalizedMessageTo(from, 1054128); m_Summon.Location = from.Location; m_Summon.Map=from.Map; m_charges=m_charges-1; from.Stabled.Remove( m_Summon ); m_Summon.SetControlMaster( from ); this.Name= "a crystal ball of pet summoning: [Charges: "+m_charges+"] [Linked Pet: "+m_linked.Name+"]"; } else { this.SendLocalizedMessageTo(from, 1049645); } } else if(m_Summon.ControlMaster !=from) { this.SendLocalizedMessageTo(from, 1054126); this.m_linked=null; } else if (m_charges !=0 && (m_Summon.Location !=from.Location || m_Summon.Map !=from.Map)) { if (m_charges <=0) { m_charges=0; this.Name= "a crystal ball of pet summoning: [Charges: "+m_charges+"] [Linked Pet: "+m_linked.Name+"]"; this.SendLocalizedMessageTo(from, 1054122); } else { this.SendLocalizedMessageTo(from, 1054128); m_Summon.Location = from.Location; m_Summon.Map=from.Map; m_charges=m_charges-1; this.Name= "a crystal ball of pet summoning: [Charges: "+m_charges+"] [Linked Pet: "+m_linked.Name+"]"; } } else if (m_charges !=0 && (m_Summon.Location ==from.Location || m_Summon.Map ==from.Map)) { if (m_charges <=0) m_charges=0; this.Name= "a crystal ball of pet summoning: [Charges: "+m_charges+"] [Linked Pet: "+m_linked.Name+"]"; this.SendLocalizedMessageTo(from, 1054123); } else if (m_charges ==0) { this.SendLocalizedMessageTo(from, 1054122); } } public override void GetContextMenuEntries( Mobile from, ArrayList list ) { base.GetContextMenuEntries( from, list ); if ( from.Alive && this.Linked == true) { list.Add( new ContextMenus.LinkEntry( from, this ) ); } } private class LinkTarget : Target { private Mobile m_Owner; private PetSummonBall m_Ball; public LinkTarget( PetSummonBall ball ) : base ( 10, false, TargetFlags.None ) { m_Ball=ball; } protected override void OnTarget( Mobile from, object target ) { if( target == from ) from.SendLocalizedMessage( 1005576 ); else if(target==m_Ball) { from.SendLocalizedMessage( 1054115 ); } else if( target is BaseCreature) { BaseCreature c = (BaseCreature)target; if(c.ControlMaster==from && m_Ball.Linked == false) { m_Ball.m_linked=c; m_Ball.Linked=true; m_Ball.Name= "a crystal ball of pet summoning: [Charges: "+m_Ball.m_charges+"] [Linked Pet: "+c.Name+"]"; from.SendLocalizedMessage( 1054119 ); } else if(c.ControlMaster!=from) { from.SendLocalizedMessage( 1054116 ); } } } } } } // created on 10/26/2003 at 8:39 AM