private void EquipTarget(Item i) { if (i == null || i.Deleted) return; if (m_Commander.CustomGuilds[m_Soldier.Government].ActiveTitle) { if (m_Commander.TitlePrefix != null && m_Commander.TitlePrefix != "") m_Soldier.Say("Yes, " + m_Commander.TitlePrefix + "."); } if (i.Layer != Layer.Invalid && i.Layer != Layer.Mount && i.Layer != Layer.ShopBuy && i.Layer != Layer.ShopResale && i.Layer != Layer.ShopSell) { m_NewEquip = i; if (m_NewEquip.Layer == Layer.FirstValid && m_NewEquip is BaseWeapon) { if (m_Soldier.FindItemOnLayer(Layer.TwoHanded) is BaseWeapon) m_CurrentEquip = m_Soldier.FindItemOnLayer(Layer.TwoHanded); else m_CurrentEquip = m_Soldier.FindItemOnLayer(Layer.OneHanded); } else m_CurrentEquip = m_Soldier.FindItemOnLayer(i.Layer); if (m_CurrentEquip != null && !m_CurrentEquip.Deleted) { if (m_NewEquip.Layer == Layer.TwoHanded) { Item oneHanded = m_Soldier.FindItemOnLayer(Layer.OneHanded); if (oneHanded == null) oneHanded = m_Soldier.FindItemOnLayer(Layer.FirstValid); if (oneHanded != null) { if (m_Commander.InRange(m_Soldier.Location, 3)) { m_Commander.AddToBackpack(oneHanded); //m_Soldier.Say("Here is the " + oneHanded.Name.ToString() + "."); m_Commander.PlaySound(oneHanded.GetDropSound()); } else { oneHanded.DropToWorld(m_Soldier, m_Soldier.Location); m_Soldier.PlaySound(oneHanded.GetDropSound()); } } } if (m_Commander.InRange(m_Soldier.Location, 3)) { m_Commander.AddToBackpack(m_CurrentEquip); //m_Soldier.Say("Here is the " + m_CurrentEquip.Name.ToString() + "."); m_Commander.PlaySound(m_CurrentEquip.GetDropSound()); } else { m_CurrentEquip.DropToWorld(m_Soldier, m_Soldier.Location); m_Soldier.PlaySound(m_CurrentEquip.GetDropSound()); } } m_Soldier.EquipItem(m_NewEquip); m_Soldier.Emote("*changes equipment*"); if (m_NewEquip is BaseMeleeWeapon) m_Soldier.AI = AIType.AI_Melee; else if (m_NewEquip is BaseRanged) m_Soldier.AI = AIType.AI_Archer; m_Soldier.PlaySound(m_NewEquip.GetLiftSound(m_Soldier)); } else m_Soldier.Say("I can't equip that."); }
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 ); } }