示例#1
0
 public void AddItem( Item item )
 {
     item.Internalize();
     m_Items.Add( item );
 }
示例#2
0
        public void Lift( Item item, int amount, out bool rejected, out LRReason reject )
        {
            rejected = true;
            reject = LRReason.Inspecific;

            if ( item == null )
                return;

            Mobile from = this;
            GameClient state = m_Client;

            if ( from.AccessLevel >= AccessLevel.GameMaster || DateTime.Now >= from.NextActionTime )
            {
                if ( from.CheckAlive() )
                {
                    from.DisruptiveAction();

                    if ( from.Holding != null )
                    {
                        reject = LRReason.AreHolding;
                    }
                    else if ( from.AccessLevel < AccessLevel.GameMaster && !from.InRange( item.GetWorldLocation(), 2 ) )
                    {
                        reject = LRReason.OutOfRange;
                    }
                    else if ( !from.CanSee( item ) || !from.InLOS( item ) )
                    {
                        reject = LRReason.OutOfSight;
                    }
                    else if ( !item.VerifyMove( from ) )
                    {
                        reject = LRReason.CannotLift;
                    }
                    else if ( !item.IsAccessibleTo( from ) )
                    {
                        reject = LRReason.CannotLift;
                    }
                    else if ( item.CheckLift( from, item, ref reject ) )
                    {
                        object root = item.RootParent;

                        if ( root != null && root is Mobile && !( (Mobile) root ).CheckNonlocalLift( from, item ) )
                        {
                            reject = LRReason.TryToSteal;
                        }
                        else if ( !from.OnDragLift( item ) || !item.OnDragLift( from ) )
                        {
                            reject = LRReason.Inspecific;
                        }
                        else if ( !from.CheckAlive() )
                        {
                            reject = LRReason.Inspecific;
                        }
                        else
                        {
                            if ( item.Parent != null && item.Parent is Container )
                                ( (Container) item.Parent ).FreePosition( item.GridLocation );

                            item.SetLastMoved();

                            if ( item.Spawner != null )
                            {
                                item.Spawner.Remove( item );
                                item.Spawner = null;
                            }

                            if ( amount == 0 )
                                amount = 1;

                            if ( amount > item.Amount )
                                amount = item.Amount;

                            int oldAmount = item.Amount;
                            //item.Amount = amount; //Set in LiftItemDupe

                            if ( amount < oldAmount )
                                LiftItemDupe( item, amount );

                            InvokeItemLifted( new ItemLiftedEventArgs( item, amount ) );

                            item.RecordBounce();
                            item.OnItemLifted( from, item );
                            item.Internalize();

                            from.Holding = item;

                            from.NextActionTime = DateTime.Now + TimeSpan.FromSeconds( 0.5 );

                            Point3D fixLoc = item.Location;
                            Map fixMap = item.Map;
                            bool shouldFix = ( item.Parent == null );

                            if ( fixMap != null && shouldFix )
                                fixMap.FixColumn( fixLoc.X, fixLoc.Y );

                            reject = LRReason.Inspecific;
                            rejected = false;
                        }
                    }
                }
                else
                {
                    reject = LRReason.Inspecific;
                }
            }
            else
            {
                SendActionMessage();
                reject = LRReason.Inspecific;
            }

            if ( rejected && state != null )
            {
                state.Send( LiftRej.Instantiate( reject ) );

                if ( item.Parent is Item )
                    state.Send( new ContainerContentUpdate( item ) );
                else if ( item.Parent is Mobile )
                    state.Send( new EquipUpdate( item ) );
                else
                    item.SendInfoTo( state );

                if ( ObjectPropertyListPacket.Enabled && item.Parent != null )
                    state.Send( item.OPLPacket );
            }
        }
示例#3
0
        public virtual void Lift( Item item, int amount, out bool rejected, out LRReason reject )
        {
            rejected = true;
            reject = LRReason.Inspecific;

            if ( item == null )
                return;

            Mobile from = this;
            NetState state = m_NetState;

            if ( from.AccessLevel >= AccessLevel.GameMaster || Core.Now >= from.NextActionTime )
            {
                if ( from.CheckAlive() )
                {
                    from.DisruptiveAction();

                    if ( from.Holding != null )
                    {
                        reject = LRReason.AreHolding;
                    }
                    else if ( from.AccessLevel < AccessLevel.GameMaster && !from.InRange( item.GetWorldLocation(), 2 ) )
                    {
                        reject = LRReason.OutOfRange;
                    }
                    else if ( !from.CanSee( item ) || !from.InLOS( item ) )
                    {
                        reject = LRReason.OutOfSight;
                    }
                    else if ( !item.VerifyMove( from ) )
                    {
                        reject = LRReason.CannotLift;
                    }
                    else if ( item.InSecureTrade || !item.IsAccessibleTo( from ) )
                    {
                        reject = LRReason.CannotLift;
                    }
                    else if ( !item.CheckLift( from, item ) )
                    {
                        reject = LRReason.Inspecific;
                    }
                    else
                    {
                        object root = item.RootParent;

                        if ( root != null && root is Mobile && !((Mobile)root).CheckNonlocalLift( from, item ) )
                        {
                            reject = LRReason.TryToSteal;
                        }
                        else if ( !from.OnDragLift( item ) || !item.OnDragLift( from ) )
                        {
                            reject = LRReason.Inspecific;
                        }
                        else if ( !from.CheckAlive() )
                        {
                            reject = LRReason.Inspecific;
                        }
                        else
                        {
                            item.SetLastMoved();

                            if ( amount == 0 )
                                amount = 1;

                            if ( amount > item.Amount )
                                amount = item.Amount;

                            int oldAmount = item.Amount;
                            item.Amount = amount;

                            if ( amount < oldAmount )
                                item.Dupe( oldAmount - amount );

                            Map map = from.Map;

                            if ( Mobile.DragEffects && map != null && (root == null || root is Item))
                            {
                                IPooledEnumerable eable = map.GetClientsInRange( from.Location );
                                Packet p = null;

                                foreach ( NetState ns in eable )
                                {
                                    if ( ns.Mobile != from && ns.Mobile.CanSee( from ) )
                                    {
                                        if ( p == null )
                                        {
                                            IEntity src;

                                            if ( root == null )
                                                src = new Entity( Serial.Zero, item.Location, map );
                                            else
                                                src = new Entity( ((Item)root).Serial, ((Item)root).Location, map );

                                            p = new DragEffect( src, from, item.ItemID, item.Hue, amount );
                                        }

                                        ns.Send( p );
                                    }
                                }

                                eable.Free();
                            }

                            Point3D fixLoc = item.Location;
                            Map fixMap = item.Map;
                            bool shouldFix = ( item.Parent == null );

                            item.RecordBounce();
                            item.OnItemLifted( from, item );
                            item.Internalize();

                            from.Holding = item;

                            int liftSound = item.GetLiftSound( from );

                            if ( liftSound != -1 )
                                from.Send( new PlaySound( liftSound, from ) );

                            from.NextActionTime = Core.Now + TimeSpan.FromSeconds( 0.5 );

                            if ( fixMap != null && shouldFix )
                                fixMap.FixColumn( fixLoc.m_X, fixLoc.m_Y );

                            reject = LRReason.Inspecific;
                            rejected = false;
                        }
                    }
                }
                else
                {
                    reject = LRReason.Inspecific;
                }
            }
            else
            {
                SendActionMessage();
                reject = LRReason.Inspecific;
            }

            if ( rejected && state != null )
            {
                state.Send( new LiftRej( reject ) );

                if( item.Parent is Item ) {
                    if ( state.IsPost6017 )
                        state.Send( new ContainerContentUpdate6017( item ) );
                    else
                        state.Send( new ContainerContentUpdate( item ) );
                } else if( item.Parent is Mobile )
                    state.Send( new EquipUpdate( item ) );
                else
                    item.SendInfoTo( state );

                if ( ObjectPropertyList.Enabled && item.Parent != null )
                    state.Send( item.OPLPacket );
            }
        }
示例#4
0
		public override void LoadWeapon(Mobile from, Item projectile)
		{
			if (projectile == null) return;

			// restrict allowed projectiles
			if (!CheckAllowedProjectile(projectile))
			{
				from.SendMessage("That cannot be loaded into this weapon");
				return;
			}

			if (Projectile != null && !Projectile.Deleted)
			{

				from.SendMessage("{0} unloaded", Projectile.Name);
				from.AddToBackpack(Projectile);
			}

			// allow stacked projectiles to be loaded
			Projectile = projectile;

			if (Projectile != null)
			{

				Projectile.Internalize();

				from.SendMessage("{0} loaded", Projectile.Name);
			}
		}