示例#1
0
        public static bool CanImbueItem(Mobile from, Item item)
        {
            if (item == null || !item.IsChildOf(from.Backpack))
                from.SendLocalizedMessage(1079575);  // The item must be in your backpack to imbue it.
            else if (item.LootType == LootType.Blessed || item.LootType == LootType.Newbied)
                from.SendLocalizedMessage(1080438);  // You cannot imbue a blessed item.
            else if (item is BaseWeapon && Spells.Mystic.EnchantSpell.IsUnderSpellEffects(from, (BaseWeapon)item))
                from.SendLocalizedMessage(1080130);  // You cannot imbue an item that is currently enchanted.
            else if (item is BaseWeapon && ((BaseWeapon)item).FocusWeilder != null)
                from.SendLocalizedMessage(1080444);  //You cannot imbue an item that is under the effects of the ninjitsu focus attack ability.
            else if (IsSpecialItem(item))
                from.SendMessage("You cannot imbue an item with such strange magical properties.");
            else if (item is IFactionItem && ((IFactionItem)item).FactionItemState != null)
                from.SendLocalizedMessage(1114312); // You cannot imbue faction items.
            else if (item is BaseJewel && !(item is BaseRing) && !(item is BaseBracelet))
                from.SendLocalizedMessage(1079576); // You cannot imbue this item.
            else if (IsInNonImbueList(item.GetType()))
                from.SendLocalizedMessage(1079576); // You cannot imbue this item.
            else if (item is BaseWeapon && ((BaseWeapon)item).TimesImbued >= 20)
                from.SendMessage("This item has been modified too many times and cannot be imbued any further.");
            else if (item is BaseArmor && ((BaseArmor)item).TimesImbued >= 20)
                from.SendMessage("This item has been modified too many times and cannot be imbued any further.");
            else if (item is BaseJewel && ((BaseJewel)item).TimesImbued >= 20)
                from.SendMessage("This item has been modified too many times and cannot be imbued any further.");
            else if (item is BaseHat && ((BaseHat)item).TimesImbued >= 20)
                from.SendMessage("This item has been modified too many times and cannot be imbued any further.");
            else
                return true;

            return false;
        }
		private void DestroyFurniture( Mobile from, Item item )
		{
			if ( !from.InRange( item.GetWorldLocation(), 3 ) )
			{
				from.SendLocalizedMessage( 500446 ); // That is too far away.
				return;
			}
			else if ( !item.IsChildOf( from.Backpack ) && !item.Movable )
			{
				from.SendLocalizedMessage( 500462 ); // You can't destroy that while it is here.
				return;
			}

			from.SendLocalizedMessage( 500461 ); // You destroy the item.
			Effects.PlaySound( item.GetWorldLocation(), item.Map, 0x3B3 );

			if ( item is Container )
			{
				if ( item is TrapableContainer )
					(item as TrapableContainer).ExecuteTrap( from );

				((Container)item).Destroy();
			}
			else
			{
				item.Delete();
			}
		}
			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( targeted is ContainerReNameTool )
				{
					ContainerReNameTool knife = targeted as ContainerReNameTool;
					if (knife != null)
					{
//						int knifeuses = knife.Charges;
//						m_ContainerReNameTool.Charges += knifeuses;
//						knife.Delete();
						from.SendMessage( 38,"You cant use this on it self!");
					}
				}
				else if ( targeted is CommodityDeedBox )
					from.SendMessage( 38, "You cant use this on Commodity Deed Box!");

				
				// put in else if statements to have it not engrave certain things, like baseweapons, or basearmor, etc etc
//				else if ( targeted is Item )
				else if ( targeted is BaseContainer )
				{
					m_engtarg = (Item)targeted;
					if(!m_engtarg.IsChildOf(from.Backpack)) from.SendMessage( 38, "This must be in your backpack to change its name." );

					else
					{
						from.SendMessage( 75,"What would you like to re-name this item to?" );
						m_ContainerReNameTool.Charges -= 1 ;
						m_ContainerReNameTool.InvalidateProperties();
						from.Prompt = new RenameContPrompt( m_engtarg );
					}
				}
				else from.SendMessage( 38, "You cannot re-name that." );
			}
示例#4
0
        public static bool HasAccess( Mobile mob, Item item )
        {
            if( item == mob.Backpack )
                return false;
            else if( mob.AccessLevel >= AccessLevel.GameMaster ) // staff have no limits
                return true;
            else if( item.IsChildOf( mob.Backpack ) )
                return true;

            return false;
        }
        public static void AddContextMenuEntries(Mobile from, Item item, List<ContextMenus.ContextMenuEntry> list, HarvestSystem system)
        {
            if ( system != Mining.System )
                return;

            if ( !item.IsChildOf( from.Backpack ) && item.Parent != from )
                return;

            PlayerMobile pm = from as PlayerMobile;

            if ( pm == null )
                return;

            list.Add( new ContextMenuEntry( pm.ToggleMiningStone ? 6179 : 6178 ) );
            list.Add( new ToggleMiningStoneEntry( pm, false, 6176 ) );
            list.Add( new ToggleMiningStoneEntry( pm, true, 6177 ) );
        }
示例#6
0
		public static void AddContextMenuEntries( Mobile from, Item item, List<ContextMenuEntry> list, HarvestSystem system )
		{
			if ( system != Mining.System )
				return;

			if ( !item.IsChildOf( from.Backpack ) && item.Parent != from )
				return;

			PlayerMobile pm = from as PlayerMobile;

			if ( pm == null )
				return;
				
			int typeentry = 0;
				
			if( pm.ToggleMiningStone )
			     typeentry = 6179;
			if( pm.ToggleMiningGem )
			     typeentry = 1112239;
			if( !pm.ToggleMiningStone && !pm.ToggleMiningGem)
			     typeentry = 6178;
			     
			ContextMenuEntry miningEntry = new ContextMenuEntry( typeentry );
			miningEntry.Color = 0x421F;
			list.Add( miningEntry );

			list.Add( new ToggleMiningStoneEntry( pm, false, false, 6176 ) );
			list.Add( new ToggleMiningStoneEntry( pm, true, false, 6177 ) );
			list.Add( new ToggleMiningStoneEntry( pm, false, true, 1112237 ) );
		}
        public override bool OnDroppedOnto(Mobile from, Item target)
        {
            if (target == from.Backpack)
            {
                Item item = from.Backpack.FindItemByType(typeof(GoldLedger));

                if (item != null)
                {
                    from.SendMessage(2125, "You can only carry one gold ledger!");
                    return false;
                }
            }

            else if (target.IsChildOf(from.Backpack))
            {
                Item item = from.Backpack.FindItemByType(typeof(GoldLedger));

                if (item != null)
                {
                    from.SendMessage(2125, "You can only carry one gold ledger!");
                    return false;
                }
            }

            return target.OnDragDrop(from, this);
        }
示例#8
0
 public static bool CanUnravelItem(Mobile from, Item item, bool message = true)
 {
     if (!item.IsChildOf(from.Backpack))
     {
         if(message)
             from.SendLocalizedMessage(1080424);  // The item must be in your backpack to magically unravel it.
     }
     else if (item.LootType == LootType.Blessed || item.LootType == LootType.Newbied)
     {
         if (message)
             from.SendLocalizedMessage(1080421);  // You cannot unravel the magic of a blessed item.
     }
     else if (item is BaseWeapon && Spells.Mystic.EnchantSpell.IsUnderSpellEffects(from, (BaseWeapon)item))
     {
         if (message)
             from.SendLocalizedMessage(1080427);  // You cannot magically unravel an item that is currently enchanted.
     }
     //else if (item is BaseWeapon && ((BaseWeapon)item).FocusWeilder != null)
     //{
     //    if (message)
     //        from.SendLocalizedMessage(1080445); //You cannot magically unravel an item that is under the effects of the ninjitsu focus attack ability.
     //}
     else if (item is IFactionItem && ((IFactionItem)item).FactionItemState != null)
     {
         if (message)
             from.SendLocalizedMessage(1112408); // You cannot magically unravel a faction reward item.
     }
     /*else if (IsSpecialItem(item))
     {
         if (message)
             from.SendMessage("You cannot magically unravel an item with such strange magical properties.");
     }*/
     else
         return true;
     return false;
 }
示例#9
0
        public override void OnSubItemAdded(Item item)
        {
            if (AccessLevel < AccessLevel.GameMaster && item.IsChildOf(this.Backpack))
            {
                int maxWeight = WeightOverloading.GetMaxWeight(this);
                int curWeight = Mobile.BodyWeight + this.TotalWeight;

                if (curWeight > maxWeight)
                    this.SendLocalizedMessage(1019035, true, String.Format(" : {0} / {1}", curWeight, maxWeight));
            }
        }
示例#10
0
		public static EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage )
		{
			if ( item == null )
				return EnhanceResult.BadItem;

			if ( !item.IsChildOf( from.Backpack ) )
				return EnhanceResult.NotInBackpack;

			if ( !(item is BaseArmor) && !(item is BaseWeapon) )
				return EnhanceResult.BadItem;

			if ( CraftResources.IsStandard( resource ) )
				return EnhanceResult.BadResource;

			CraftItem craftItem = craftSystem.CraftItems.SearchFor( item.GetType() );

			if ( craftItem == null || craftItem.Ressources.Count == 0 )
				return EnhanceResult.BadItem;

			int quality = 0;
			bool allRequiredSkills = false;

			if ( !craftItem.CheckSkills( from, resType, craftSystem, ref quality, ref allRequiredSkills, false ) )
				return EnhanceResult.NoSkill;

			CraftResourceInfo info = CraftResources.GetInfo( resource );

			if ( info == null || info.ResourceTypes.Length == 0 )
				return EnhanceResult.BadResource;

			CraftAttributeInfo attributes = info.AttributeInfo;

			if ( attributes == null )
				return EnhanceResult.BadResource;

			int resHue = 0, maxAmount = 0;

			if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref resMessage ) )
				return EnhanceResult.NoResources;

			if ( craftSystem is DefBlacksmithy )
			{
				AncientSmithyHammer hammer = from.FindItemOnLayer( Layer.OneHanded ) as AncientSmithyHammer;
				if ( hammer != null )
				{
					hammer.UsesRemaining--;
					if ( hammer.UsesRemaining < 1 )
						hammer.Delete();
				}
			}

			int phys = 0, fire = 0, cold = 0, pois = 0, nrgy = 0;
			int dura = 0, luck = 0, lreq = 0, dinc = 0;
			int baseChance = 0;

			bool physBonus = false;
			bool fireBonus = false;
			bool coldBonus = false;
			bool nrgyBonus = false;
			bool poisBonus = false;
			bool duraBonus = false;
			bool luckBonus = false;
			bool lreqBonus = false;
			bool dincBonus = false;

			if ( item is BaseWeapon )
			{
				BaseWeapon weapon = (BaseWeapon)item;

				if ( !CraftResources.IsStandard( weapon.Resource ) )
					return EnhanceResult.AlreadyEnhanced;

				baseChance = 20;

				dura = weapon.MaxHitPoints;
				luck = weapon.Attributes.Luck;
				lreq = weapon.WeaponAttributes.LowerStatReq;
				dinc = weapon.Attributes.WeaponDamage;

				fireBonus = ( attributes.WeaponFireDamage > 0 );
				coldBonus = ( attributes.WeaponColdDamage > 0 );
				nrgyBonus = ( attributes.WeaponEnergyDamage > 0 );
				poisBonus = ( attributes.WeaponPoisonDamage > 0 );

				duraBonus = ( attributes.WeaponDurability > 0 );
				luckBonus = ( attributes.WeaponLuck > 0 );
				lreqBonus = ( attributes.WeaponLowerRequirements > 0 );
				dincBonus = ( dinc > 0 );
			}
			else
			{
				BaseArmor armor = (BaseArmor)item;

				if ( !CraftResources.IsStandard( armor.Resource ) )
					return EnhanceResult.AlreadyEnhanced;

				baseChance = 20;

				phys = armor.PhysicalResistance;
				fire = armor.FireResistance;
				cold = armor.ColdResistance;
				pois = armor.PoisonResistance;
				nrgy = armor.EnergyResistance;

				dura = armor.MaxHitPoints;
				luck = armor.Attributes.Luck;
				lreq = armor.ArmorAttributes.LowerStatReq;

				physBonus = ( attributes.ArmorPhysicalResist > 0 );
				fireBonus = ( attributes.ArmorFireResist > 0 );
				coldBonus = ( attributes.ArmorColdResist > 0 );
				nrgyBonus = ( attributes.ArmorEnergyResist > 0 );
				poisBonus = ( attributes.ArmorPoisonResist > 0 );

				duraBonus = ( attributes.ArmorDurability > 0 );
				luckBonus = ( attributes.ArmorLuck > 0 );
				lreqBonus = ( attributes.ArmorLowerRequirements > 0 );
				dincBonus = false;
			}

			int skill = from.Skills[craftSystem.MainSkill].Fixed / 10;

			if ( skill >= 100 )
				baseChance -= (skill - 90) / 10;

			EnhanceResult res = EnhanceResult.Success;

			if ( physBonus )
				CheckResult( ref res, baseChance + phys );

			if ( fireBonus )
				CheckResult( ref res, baseChance + fire );

			if ( coldBonus )
				CheckResult( ref res, baseChance + cold );

			if ( nrgyBonus )
				CheckResult( ref res, baseChance + nrgy );

			if ( poisBonus )
				CheckResult( ref res, baseChance + pois );

			if ( duraBonus )
				CheckResult( ref res, baseChance + (dura / 40) );

			if ( luckBonus )
				CheckResult( ref res, baseChance + 10 + (luck / 2) );

			if ( lreqBonus )
				CheckResult( ref res, baseChance + (lreq / 4) );

			if ( dincBonus )
				CheckResult( ref res, baseChance + (dinc / 4) );

			switch ( res )
			{
				case EnhanceResult.Broken:
				{
					if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
						return EnhanceResult.NoResources;

					item.Delete();
					break;
				}
				case EnhanceResult.Success:
				{
					if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref resMessage ) )
						return EnhanceResult.NoResources;

					if( item is BaseWeapon )
					{
						BaseWeapon w = (BaseWeapon)item;

						w.Resource = resource;

						int hue = w.GetElementalDamageHue();
						if( hue > 0 )
							w.Hue = hue;
					}
					else if( item is BaseArmor )	//Sanity
					{
						((BaseArmor)item).Resource = resource;
					}

					break;
				}
				case EnhanceResult.Failure:
				{
					if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
						return EnhanceResult.NoResources;

					break;
				}
			}

			return res;
		}
示例#11
0
        public static EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage )
        {
            if ( item == null )
                return EnhanceResult.BadItem;

            if ( !item.IsChildOf( from.Backpack ) )
                return EnhanceResult.NotInBackpack;

            if ( !( item is BaseArmor ) && !( item is BaseWeapon ) )
                return EnhanceResult.BadItem;

            if ( CraftResources.IsStandard( resource ) )
                return EnhanceResult.BadResource;

            CraftItem craftItem;

            if ( m_CheckForSubclass.Contains( item.GetType() ) )
                craftItem = craftSystem.CraftItems.SearchForSubclass( item.GetType() );
            else
                craftItem = craftSystem.CraftItems.SearchFor( item.GetType() );

            if ( craftItem == null || craftItem.Ressources.Count == 0 || craftItem.ForceCannotEnhance )
                return EnhanceResult.BadItem;

            if ( CraftableArtifacts.IsCraftableArtifact( item ) )
                return EnhanceResult.BadItem;

            bool exceptional = false;
            bool allRequiredSkills = false;

            if ( !craftItem.CheckSkills( from, resType, craftSystem, ref exceptional, ref allRequiredSkills, false ) )
                return EnhanceResult.NoSkill;

            CraftResourceInfo info = CraftResources.GetInfo( resource );

            if ( info == null || info.ResourceTypes.Length == 0 )
                return EnhanceResult.BadResource;

            CraftAttributeInfo attributes = info.AttributeInfo;

            if ( attributes == null )
                return EnhanceResult.BadResource;

            int resHue = 0, maxAmount = 0;

            if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref resMessage ) )
                return EnhanceResult.NoResources;

            AncientSmithyHammer hammer = from.FindItemOnLayer( Layer.OneHanded ) as AncientSmithyHammer;

            if ( hammer != null )
            {
                if ( !( tool != null && ( tool is SewingKit || tool is RunicSewingKit ) ) )
                {
                    hammer.UsesRemaining--;

                    if ( hammer.UsesRemaining < 1 )
                        hammer.Delete();
                }
            }

            int phys = 0, fire = 0, cold = 0, pois = 0, nrgy = 0;
            int dura = 0, luck = 0, lreq = 0, dinc = 0;
            int baseChance = 0;

            bool physBonus = false;
            bool fireBonus = false;
            bool coldBonus = false;
            bool nrgyBonus = false;
            bool poisBonus = false;
            bool duraBonus = false;
            bool luckBonus = false;
            bool lreqBonus = false;
            bool dincBonus = false;

            if ( item is BaseWeapon )
            {
                BaseWeapon weapon = (BaseWeapon) item;

                if ( !CraftResources.IsStandard( weapon.Resource ) )
                    return EnhanceResult.AlreadyEnhanced;

                baseChance = 20;

                dura = weapon.MaxHitPoints;
                luck = weapon.Attributes.Luck;
                lreq = weapon.WeaponAttributes.LowerStatReq;
                dinc = weapon.Attributes.WeaponDamage;

                fireBonus = ( attributes.WeaponFireDamage > 0 );
                coldBonus = ( attributes.WeaponColdDamage > 0 );
                nrgyBonus = ( attributes.WeaponEnergyDamage > 0 );
                poisBonus = ( attributes.WeaponPoisonDamage > 0 );

                duraBonus = ( attributes.WeaponDurability > 0 );
                luckBonus = ( attributes.WeaponLuck > 0 );
                lreqBonus = ( attributes.WeaponLowerRequirements > 0 );
                dincBonus = ( dinc > 0 );
            }
            else
            {
                BaseArmor armor = (BaseArmor) item;

                if ( !CraftResources.IsStandard( armor.Resource ) )
                    return EnhanceResult.AlreadyEnhanced;

                baseChance = 20;

                phys = armor.PhysicalResistance;
                fire = armor.FireResistance;
                cold = armor.ColdResistance;
                pois = armor.PoisonResistance;
                nrgy = armor.EnergyResistance;

                dura = armor.MaxHitPoints;
                luck = armor.Attributes.Luck;
                lreq = armor.ArmorAttributes.LowerStatReq;

                physBonus = ( attributes.ArmorPhysicalResist > 0 );
                fireBonus = ( attributes.ArmorFireResist > 0 );
                coldBonus = ( attributes.ArmorColdResist > 0 );
                nrgyBonus = ( attributes.ArmorEnergyResist > 0 );
                poisBonus = ( attributes.ArmorPoisonResist > 0 );

                duraBonus = ( attributes.ArmorDurability > 0 );
                luckBonus = ( attributes.ArmorLuck > 0 );
                lreqBonus = ( attributes.ArmorLowerRequirements > 0 );
                dincBonus = false;
            }

            int skill = from.Skills[craftSystem.MainSkill].Fixed / 10;

            if ( skill >= 100 )
                baseChance -= ( skill - 90 ) / 10;

            EnhanceResult res = EnhanceResult.Success;

            PlayerMobile user = from as PlayerMobile;

            if ( physBonus )
                CheckResult( ref res, baseChance + phys );

            if ( fireBonus )
                CheckResult( ref res, baseChance + fire );

            if ( coldBonus )
                CheckResult( ref res, baseChance + cold );

            if ( nrgyBonus )
                CheckResult( ref res, baseChance + nrgy );

            if ( poisBonus )
                CheckResult( ref res, baseChance + pois );

            if ( duraBonus )
                CheckResult( ref res, baseChance + ( dura / 40 ) );

            if ( luckBonus )
                CheckResult( ref res, baseChance + 10 + ( luck / 2 ) );

            if ( lreqBonus )
                CheckResult( ref res, baseChance + ( lreq / 4 ) );

            if ( dincBonus )
                CheckResult( ref res, baseChance + ( dinc / 4 ) );

            if ( user.NextEnhanceSuccess )
            {
                user.NextEnhanceSuccess = false;
                user.SendLocalizedMessage( 1149969 ); // The magical aura that surrounded you disipates and you feel that your item enhancement chances have returned to normal.
                res = EnhanceResult.Success;
            }

            switch ( res )
            {
                case EnhanceResult.Broken:
                    {
                        if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
                            return EnhanceResult.NoResources;

                        item.Delete();
                        break;
                    }
                case EnhanceResult.Success:
                    {
                        if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref resMessage ) )
                            return EnhanceResult.NoResources;

                        if ( item is BaseWeapon )
                        {
                            BaseWeapon w = (BaseWeapon) item;

                            w.Resource = resource;

                            int hue = w.GetElementalDamageHue();

                            if ( hue > 0 )
                                w.Hue = hue;
                        }
                        else if ( item is BaseArmor )
                            ( (BaseArmor) item ).Resource = resource;

                        break;
                    }
                case EnhanceResult.Failure:
                    {
                        if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
                            return EnhanceResult.NoResources;

                        break;
                    }
            }

            return res;
        }
示例#12
0
		public static bool TryPlace(Mobile from, int boardsRequired, int ingotsRequired, Item tool)
		{
			bool bReturn = false;

			if (tool.IsChildOf(from.Backpack) || tool.Parent == from)
			{
				PlayerMobile pm = from as PlayerMobile;

				if (pm != null)
				{
					Point3D targetPoint = from.Location;
					CustomRegion cr = CustomRegion.FindDRDTRegion(from.Map, targetPoint);
					if (cr is TownshipRegion)
					{
						TownshipRegion tsr = cr as TownshipRegion;
						if (tsr != null && tsr.TStone != null && tsr.TStone.Guild != null &&
							tsr.TStone.Guild == from.Guild)
						{
							//for Adam, check for 100% ownership
							if (1.0 == TownshipDeed.GetPercentageOfGuildedHousesInArea(tsr.TStone.TownshipCenter, tsr.TStone.Map, tsr.TStone.Extended ? TownshipStone.EXTENDED_RADIUS : TownshipStone.INITIAL_RADIUS, tsr.TStone.Guild, false))
							{
								//make sure we're not in a house, or right beside it
								BaseHouse house = null;
								bool bHouseRestriction = false;

								//find all the houses within 5 tiles of this location
								int radius = 5;
								Dictionary<BaseHouse, int> houseDict = new Dictionary<BaseHouse, int>();

								for (int i = radius * -1; i <= radius && house == null; i++)
								{
									for (int j = radius * -1; j <= radius && house == null; j++)
									{
										Point3D currentCheck = new Point3D(targetPoint.X + i, targetPoint.Y + j, targetPoint.Z);
										house = BaseHouse.FindHouseAt(currentCheck, from.Map, 16);
										if (house != null)
										{
											int distance = (int)Math.Sqrt(sqr(currentCheck.X - targetPoint.X) + sqr(currentCheck.Y - targetPoint.Y));
											if (houseDict.ContainsKey(house))
											{
												int saveddistance = houseDict[house];
												if (saveddistance > distance)
												{
													houseDict[house] = distance;
												}
											}
											else
											{
												houseDict.Add(house, distance);
											}
										}
									}
								}

								//now we have a list of all houses within the radius from the point where the wall is to be built and their distance from the point
								foreach (BaseHouse h in houseDict.Keys)
								{
									if (h.Owner != null)
									{
										if (tsr.TStone.Guild.IsMember(h.Owner) == false && houseDict[h] <= 5.0)
										{
											bHouseRestriction = true;
											break;
										}
//										else if (houseDict[h] <= 1.0)
//										{
//											bHouseRestriction = true;
//											break;
//										}
									}
								}

								if (bHouseRestriction == false)
								{
									//next check for teleporters
									bool bTeleporterRestriction = false;
									int iTeleporterDistanceRange = TownshipSettings.WallTeleporterDistance;

									IPooledEnumerable itemlist = from.Map.GetItemsInRange(targetPoint, iTeleporterDistanceRange);
									foreach (Item item in itemlist)
									{
										if (item is Teleporter)
										{
											bTeleporterRestriction = true;
											break;
										}
									}
									itemlist.Free();


									if (bTeleporterRestriction == false)
									{
										bool hasResources = false;
										Item[] boards = from.Backpack.FindItemsByType(typeof(Board), true);
										Item[] ingots = from.Backpack.FindItemsByType(typeof(IronIngot), true);

										int boardCount = 0;
										int ingotCount = 0;
										for (int i = 0; i < boards.Length; i++)
										{
											boardCount += boards[i].Amount;
										}
										for (int i = 0; i < ingots.Length; i++)
										{
											ingotCount += ingots[i].Amount;
										}

										hasResources = (boardCount >= boardsRequired) && (ingotCount >= ingotsRequired);

										if (hasResources)
										{
											from.Backpack.ConsumeTotal(typeof(Board), boardsRequired);
											from.Backpack.ConsumeTotal(typeof(IronIngot), ingotsRequired);
											//from.SendMessage("You place the wall.");

											bReturn = true;
										}
										else
										{
											from.SendMessage("You don't have the resources to build this wall.");
											from.SendMessage("You need {0} boards and {1} iron ingots.", boardsRequired, ingotsRequired);
										}
									}
									else
									{
										from.SendMessage("You can't place this here.");
										from.SendMessage("Certain areas are restricted from placement because they would block normal transportation and entrances/exits.");
									}
								}
								else
								{
									from.SendMessage("You can't place this in or by a house.");
									from.SendMessage("You can place outside of one tile from a house that the township owns,");
									from.SendMessage("but not within 6 tiles of a house that the township doesn't own.");
								}
							}
							else
							{
								from.SendMessage("Your guild must own all houses in this township to build fortifications..");
							}
						}
						else
						{
							from.SendMessage("You must place this within the township that your guild owns.");
						}
					}
					else
					{
						from.SendMessage("You must place this within the township that your guild owns.");
					}

				}
			}
			else
			{
				from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
			}

			return bReturn;
		}
示例#13
0
        public void TryAddEntry(Item item, Mobile from)
        {
            if (!CanUse(from) || item == null)
                return;

            if (!CheckRange(from))
                from.SendLocalizedMessage(3000268); // that is too far away.
            else if (!(item is TreasureMap || item is SOS || item is MessageInABottle))
                from.SendLocalizedMessage(1153564); // That is not a treasure map or message in a bottle.
            else if (!item.IsChildOf(from.Backpack))
                from.SendLocalizedMessage(1054107); // This item must be in your backpack.
            else if (m_Entries.Count >= 500)
                from.SendLocalizedMessage(1153565); // The locker is full
            else
            {
                DaviesLockerEntry entry = null;

                if (item is TreasureMap)
                    entry = new TreasureMapEntry((TreasureMap)item);
                else if (item is SOS)
                    entry = new SOSEntry((SOS)item);
                else if (item is MessageInABottle)
                    entry = new SOSEntry((MessageInABottle)item);

                if (entry != null)
                {
                    m_Entries.Add(entry);
                    from.CloseGump(typeof(DaviesLockerGump));
                    from.SendGump(new DaviesLockerGump(from, this));

                    item.Delete();

                    InvalidateProperties();
                }
            }
        }
示例#14
0
		public static bool CanUse( Mobile from, Item toUse )
		{
			if( from == null || toUse == null )
				return false;

			if( from.Frozen )
				from.SendAsciiMessage( "You are frozen and you cannot do that." );
			else if( !toUse.Movable )
				from.SendAsciiMessage( "You can't use that." );
			else if( !toUse.IsChildOf( from.Backpack ) && toUse.Parent != from && !from.InRange( toUse.Location, 4 ) && !toUse.IsChildOf( from.BankBox ) && !from.BankBox.Opened )
				from.SendAsciiMessage( "You can't reach that." );
			else if( !from.InLOS( toUse ) && !toUse.IsChildOf( from.BankBox ) && !from.BankBox.Opened )
				from.SendAsciiMessage( "You can't see that." );
			else
				return toUse.CanEquip( from );

			return false;
		}
        public static EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage )
        {
            if ( item == null )
                return EnhanceResult.BadItem;

            if ( !item.IsChildOf( from.Backpack ) )
                return EnhanceResult.NotInBackpack;

            if ( !(item is BaseArmor) && !(item is BaseWeapon) && !(item is BaseOtherEquipable) )
                return EnhanceResult.BadItem;

            if ( item is IArcaneEquip )
            {
                IArcaneEquip eq = (IArcaneEquip)item;
                if ( eq.IsArcane )
                    return EnhanceResult.BadItem;
            }

            if ( CraftResources.IsStandard( resource ) )
                return EnhanceResult.BadResource;

            int num = craftSystem.CanCraft( from, tool, item.GetType() );

            if ( num > 0 )
            {
                resMessage = num;
                return EnhanceResult.None;
            }

            CraftItem craftItem = craftSystem.CraftItems.SearchFor( item.GetType() );

            if ( craftItem == null || craftItem.Resources.Count == 0 )
                return EnhanceResult.BadItem;

            bool allRequiredSkills = false;
            if( craftItem.GetSuccessChance( from, resType, craftSystem, false, ref allRequiredSkills ) <= 0.0 )
                return EnhanceResult.NoSkill;

            CraftResourceInfo info = CraftResources.GetInfo( resource );

            if ( info == null || info.ResourceTypes.Length == 0 )
                return EnhanceResult.BadResource;

            CraftAttributeInfo attributes = info.AttributeInfo;

            if ( attributes == null )
                return EnhanceResult.BadResource;

            int resHue = 0, maxAmount = 0;

            if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref resMessage ) )
                return EnhanceResult.NoResources;

            if ( craftSystem is DefBlacksmithy )
            {
                AncientSmithyHammer hammer = from.FindItemOnLayer( Layer.OneHanded ) as AncientSmithyHammer;
                if ( hammer != null )
                {
                    hammer.UsesRemaining--;
                    if ( hammer.UsesRemaining < 1 )
                        hammer.Delete();
                }
            }

            int baseChance = 0;

            BonusAttribute[] bonusAttrs = null;
            BonusAttribute[] randomAttrs = null;

            if ( item is BaseWeapon )
            {
                BaseWeapon weapon = (BaseWeapon)item;

                if ( !CraftResources.IsStandard( weapon.Resource ) )
                    return EnhanceResult.AlreadyEnhanced;

                baseChance = 18; // Silver: used to be 20

                CheckSkill( ref baseChance, from, craftSystem );

                int numOfRand = attributes.RandomAttributeCount;

                bonusAttrs = attributes.WeaponAttributes;
                randomAttrs = BonusAttributesHelper.GetRandomAttributes( attributes.WeaponRandomAttributes, numOfRand );
            }
            else if ( item is BaseArmor )
            {
                BaseArmor armor = (BaseArmor)item;

                if ( !CraftResources.IsStandard( armor.Resource ) )
                    return EnhanceResult.AlreadyEnhanced;

                baseChance = 18; // Silver: used to be 20

                CheckSkill( ref baseChance, from, craftSystem );

                int numOfRand = attributes.RandomAttributeCount;

                if ( armor.UsesShieldAttrs )
                {
                    bonusAttrs = attributes.ShieldAttributes;
                    randomAttrs = BonusAttributesHelper.GetRandomAttributes( attributes.ShieldRandomAttributes, numOfRand );
                }
                else
                {
                    bonusAttrs = info.AttributeInfo.ArmorAttributes;
                    randomAttrs = BonusAttributesHelper.GetRandomAttributes( attributes.ArmorRandomAttributes, numOfRand );
                }
            }
            else if ( item is BaseOtherEquipable )
            {
                BaseOtherEquipable otherEquip = (BaseOtherEquipable)item;

                if ( !CraftResources.IsStandard( otherEquip.Resource ) )
                    return EnhanceResult.AlreadyEnhanced;

                baseChance = 18; // Kamron: used to be 20

                CheckSkill( ref baseChance, from, craftSystem );

                int numOfRand = attributes.RandomAttributeCount;

                bonusAttrs = attributes.OtherAttributes;
                randomAttrs = BonusAttributesHelper.GetRandomAttributes( attributes.OtherRandomAttributes, numOfRand );
            }

            List<BonusAttribute> attrs = new List<BonusAttribute>();
            if ( bonusAttrs != null && bonusAttrs.Length > 0 )
                attrs.AddRange( bonusAttrs );
            if ( randomAttrs != null && randomAttrs.Length > 0 )
                attrs.AddRange( randomAttrs );

            EnhanceResult res = EnhanceResult.Success;

            TryEnhance( attrs, item, baseChance, ref res );

            switch ( res )
            {
                case EnhanceResult.Broken:
                {
                    if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
                        return EnhanceResult.NoResources;

                    item.Delete();
                    break;
                }
                case EnhanceResult.Success:
                {
                    if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref resMessage ) )
                        return EnhanceResult.NoResources;

                    if( item is BaseWeapon )
                    {
                        BaseWeapon w = (BaseWeapon)item;

                        w.RandomAttributes = randomAttrs;

                        w.Resource = resource;

                        w.Hue = w.GetElementalDamageHue( w.Hue );
                    }
                    else if( item is BaseArmor )
                    {
                        BaseArmor ar = (BaseArmor)item;

                        ar.RandomAttributes = randomAttrs;

                        ((BaseArmor)item).Resource = resource;
                    }
                    else if( item is BaseOtherEquipable )	//Sanity
                    {
                        BaseOtherEquipable otherEquip = (BaseOtherEquipable)item;

                        otherEquip.RandomAttributes = randomAttrs;

                        ((BaseOtherEquipable)item).Resource = resource;
                    }

                    break;
                }
                case EnhanceResult.Failure:
                {
                    if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
                        return EnhanceResult.NoResources;

                    break;
                }
            }

            return res;
        }
示例#16
0
        /// <summary>
        /// Performs the pre-imbue checks for the given Mobile and Item.
        /// </summary>
        public static bool Check( Mobile from, Item item )
        {
            IImbuable imbuable = item as IImbuable;
            BaseWeapon weapon = item as BaseWeapon;

            /*
             * Additional checks that OSI performs but aren't needed on X-RunUO:
             * - Focus Attack effect: 1080444 "You cannot imbue an item that is under the effects of the ninjitsu focus attack ability."
             */

            if ( !Soulforge.CheckProximity( from, 2 ) )
                from.SendLocalizedMessage( 1079787 ); // You must be near a soulforge to imbue an item.
            else if ( !Soulforge.CheckQueen( from ) )
                from.SendLocalizedMessage( 1113736 ); // You must rise to the rank of noble in the eyes of the Gargoyle Queen before her majesty will allow you to use this soulforge.
            else if ( item == null || !item.IsChildOf( from.Backpack ) )
                from.SendLocalizedMessage( 1079575 ); // The item must be in your backpack to imbue it.
            else if ( imbuable == null || !imbuable.CanImbue || item is ISetItem || item is ICollectionItem )
                from.SendLocalizedMessage( 1079576 ); // You cannot imbue this item.
            else if ( item.LootType == LootType.Blessed )
                from.SendLocalizedMessage( 1080438 ); // You cannot imbue a blessed item.
            else if ( weapon != null && weapon.Enchanted )
                from.SendLocalizedMessage( 1080130 ); // You cannot imbue an item that is currently enchanted.
            else
                return true;

            return false;
        }
示例#17
0
文件: BaseTool.cs 项目: Godkong/RunUO
 public static bool CheckAccessible( Item tool, Mobile m )
 {
     return ( tool.IsChildOf( m ) || tool.Parent == m );
 }
            protected override void OnTarget(Mobile from, object target)
            {
                m_Player = from as PlayerMobile;

                if (m_Player == null)
                {
                    return;
                }
                if (m_ArcaneEssence == null)
                {
                    m_Player.SendMessage("That arcane essence is no longer available.");
                    return;
                }

                if (m_ArcaneEssence.Deleted)
                {
                    m_Player.SendMessage("That arcane essence is no longer available.");
                    return;
                }

                if (!m_ArcaneEssence.IsChildOf(m_Player.Backpack))
                {
                    m_Player.SendMessage("The arcane essence you wish to use must be in your backpack.");
                    return;
                }

                Item targetItem = target as Item;

                if (targetItem == null)
                {
                    m_Player.SendMessage("That is not an item.");
                    return;
                }

                if (!(targetItem.IsChildOf(m_Player.Backpack) || targetItem.RootParent == m_Player))
                {
                    m_Player.SendMessage("The item you wish to recharge must be in your backpack or currently equipped.");
                    return;
                }

                if (targetItem.ArcaneChargesPerArcaneEssence == 0)
                {
                    m_Player.SendMessage("That item cannot be recharged with arcane essence.");
                    return;
                }

                if (!targetItem.ArcaneRechargeable)
                {
                    m_Player.SendMessage("That item cannot be recharged with arcane essence.");
                    return;
                }


                if (targetItem.ArcaneCharges >= targetItem.ArcaneChargesMax)
                {
                    m_Player.SendMessage("That item is at it's maximum number of arcane charges.");
                    return;
                }

                if (targetItem.IsArcaneRechargeRestricted(m_Player))
                {
                    return;
                }

                int arcaneChargesAvailable = targetItem.ArcaneChargesMax - targetItem.ArcaneCharges;

                double arcaneEssenceNeeded = 0;
                double arcaneChargesGrantedPerArcaneEssence = targetItem.ArcaneChargesPerArcaneEssence;

                if (((double)m_ArcaneEssence.Amount * arcaneChargesGrantedPerArcaneEssence) < 1)
                {
                    double arcaneEssenceNeededPerCharge = Math.Ceiling(1.0 / arcaneChargesGrantedPerArcaneEssence);

                    if (arcaneEssenceNeededPerCharge > m_ArcaneEssence.Amount)
                    {
                        m_Player.SendMessage("You do not have sufficient arcane essence to provide any charges to that item.");
                        return;
                    }
                }

                if (((double)m_ArcaneEssence.Amount * arcaneChargesGrantedPerArcaneEssence) >= (double)arcaneChargesAvailable)
                {
                    int arcaneEssenceToUse = (int)(Math.Ceiling((double)arcaneChargesAvailable / arcaneChargesGrantedPerArcaneEssence));

                    targetItem.ArcaneCharges = targetItem.ArcaneChargesMax;
                    m_ArcaneEssence.Amount  -= arcaneEssenceToUse;

                    if (m_ArcaneEssence.Amount == 0)
                    {
                        m_ArcaneEssence.Delete();
                    }

                    m_Player.PlaySound(0x5AA);
                    m_Player.SendMessage("You use " + arcaneEssenceToUse.ToString() + " arcane essence to fully recharge the item.");

                    return;
                }

                else
                {
                    int initialAmount     = m_ArcaneEssence.Amount;
                    int rechargesPossible = (int)(Math.Floor((double)m_ArcaneEssence.Amount * arcaneChargesGrantedPerArcaneEssence));

                    targetItem.ArcaneCharges += rechargesPossible;
                    m_ArcaneEssence.Delete();

                    m_Player.PlaySound(0x5AA);
                    m_Player.SendMessage("You use " + initialAmount + " arcane essence to add " + rechargesPossible.ToString() + " charges to the item.");

                    return;
                }
            }
示例#19
0
		public static EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage )
		{
			if ( item == null )
				return EnhanceResult.BadItem;

			if ( !item.IsChildOf( from.Backpack ) )
				return EnhanceResult.NotInBackpack;

			if ( !(item is BaseArmor) && !(item is BaseWeapon) )
				return EnhanceResult.BadItem;

			if ( CraftResources.IsStandard( resource ) )
				return EnhanceResult.BadResource;
			
			int num = craftSystem.CanCraft( from, tool, item.GetType() );
			
			if ( num > 0 )
			{
				resMessage = num;
				return EnhanceResult.None;
			}

			CraftItem craftItem = craftSystem.CraftItems.SearchFor( item.GetType() );

			if ( craftItem == null || craftItem.Resources.Count == 0 )
				return EnhanceResult.BadItem;

			#region Mondain's Legacy
			if ( craftItem.ForceNonExceptional )
				return EnhanceResult.BadItem;
			#endregion

			bool allRequiredSkills = false;
			if( craftItem.GetSuccessChance( from, resType, craftSystem, false, ref allRequiredSkills ) <= 0.0 )
				return EnhanceResult.NoSkill;

			CraftResourceInfo info = CraftResources.GetInfo( resource );

			if ( info == null || info.ResourceTypes.Length == 0 )
				return EnhanceResult.BadResource;

			CraftAttributeInfo attributes = info.AttributeInfo;

			if ( attributes == null )
				return EnhanceResult.BadResource;

			int resHue = 0, maxAmount = 0;

			if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref resMessage ) )
				return EnhanceResult.NoResources;

			if ( craftSystem is DefBlacksmithy )
			{
				AncientSmithyHammer hammer = from.FindItemOnLayer( Layer.OneHanded ) as AncientSmithyHammer;
				if ( hammer != null )
				{
					hammer.UsesRemaining--;
					if ( hammer.UsesRemaining < 1 )
						hammer.Delete();
				}
			}

			int phys = 0, fire = 0, cold = 0, pois = 0, nrgy = 0;
			int dura = 0, luck = 0, lreq = 0, dinc = 0;
			int baseChance = 0;

			bool physBonus = false;
			bool fireBonus = false;
			bool coldBonus = false;
			bool nrgyBonus = false;
			bool poisBonus = false;
			bool duraBonus = false;
			bool luckBonus = false;
			bool lreqBonus = false;
			bool dincBonus = false;

			if ( item is BaseWeapon )
			{
				BaseWeapon weapon = (BaseWeapon)item;

				if ( !CraftResources.IsStandard( weapon.Resource ) )
					return EnhanceResult.AlreadyEnhanced;

				baseChance = 20;

				dura = weapon.MaxHitPoints;
				luck = weapon.Attributes.Luck;
				lreq = weapon.WeaponAttributes.LowerStatReq;
				dinc = weapon.Attributes.WeaponDamage;

				fireBonus = ( attributes.WeaponFireDamage > 0 );
				coldBonus = ( attributes.WeaponColdDamage > 0 );
				nrgyBonus = ( attributes.WeaponEnergyDamage > 0 );
				poisBonus = ( attributes.WeaponPoisonDamage > 0 );

				duraBonus = ( attributes.WeaponDurability > 0 );
				luckBonus = ( attributes.WeaponLuck > 0 );
				lreqBonus = ( attributes.WeaponLowerRequirements > 0 );
				dincBonus = ( dinc > 0 );
			}
			else
			{
				BaseArmor armor = (BaseArmor)item;

				if ( !CraftResources.IsStandard( armor.Resource ) )
					return EnhanceResult.AlreadyEnhanced;

				baseChance = 20;

				phys = armor.PhysicalResistance;
				fire = armor.FireResistance;
				cold = armor.ColdResistance;
				pois = armor.PoisonResistance;
				nrgy = armor.EnergyResistance;

				dura = armor.MaxHitPoints;
				luck = armor.Attributes.Luck;
				lreq = armor.ArmorAttributes.LowerStatReq;

				physBonus = ( attributes.ArmorPhysicalResist > 0 );
				fireBonus = ( attributes.ArmorFireResist > 0 );
				coldBonus = ( attributes.ArmorColdResist > 0 );
				nrgyBonus = ( attributes.ArmorEnergyResist > 0 );
				poisBonus = ( attributes.ArmorPoisonResist > 0 );

				duraBonus = ( attributes.ArmorDurability > 0 );
				luckBonus = ( attributes.ArmorLuck > 0 );
				lreqBonus = ( attributes.ArmorLowerRequirements > 0 );
				dincBonus = false;
			}

			int skill = from.Skills[craftSystem.MainSkill].Fixed / 10;

			if ( skill >= 100 )
				baseChance -= (skill - 90) / 10;

			EnhanceResult res = EnhanceResult.Success;

			if ( physBonus )
				CheckResult( ref res, baseChance + phys );

			if ( fireBonus )
				CheckResult( ref res, baseChance + fire );

			if ( coldBonus )
				CheckResult( ref res, baseChance + cold );

			if ( nrgyBonus )
				CheckResult( ref res, baseChance + nrgy );

			if ( poisBonus )
				CheckResult( ref res, baseChance + pois );

			if ( duraBonus )
				CheckResult( ref res, baseChance + (dura / 40) );

			if ( luckBonus )
				CheckResult( ref res, baseChance + 10 + (luck / 2) );

			if ( lreqBonus )
				CheckResult( ref res, baseChance + (lreq / 4) );

			if ( dincBonus )
				CheckResult( ref res, baseChance + (dinc / 4) );

			switch ( res )
			{
				case EnhanceResult.Broken:
				{
					if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
						return EnhanceResult.NoResources;

					item.Delete();
					break;
				}
				case EnhanceResult.Success:
				{
					if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref resMessage ) )
						return EnhanceResult.NoResources;

					if( item is BaseWeapon )
					{
						BaseWeapon w = (BaseWeapon)item;

						w.Resource = resource;

						#region Mondain's Legacy
						if ( resource != CraftResource.Heartwood )
						{
							w.Attributes.WeaponDamage += attributes.WeaponDamage;
							w.Attributes.WeaponSpeed += attributes.WeaponSwingSpeed;
							w.Attributes.AttackChance += attributes.WeaponHitChance;
							w.Attributes.RegenHits += attributes.WeaponRegenHits;			
							w.WeaponAttributes.HitLeechHits += attributes.WeaponHitLifeLeech;
						}
						else
						{
							switch ( Utility.Random( 6 ) )
							{
								case 0: w.Attributes.WeaponDamage += attributes.WeaponDamage; break;
								case 1: w.Attributes.WeaponSpeed += attributes.WeaponSwingSpeed; break;
								case 2: w.Attributes.AttackChance += attributes.WeaponHitChance; break;
								case 3: w.Attributes.Luck += attributes.WeaponLuck; break;
								case 4: w.WeaponAttributes.LowerStatReq += attributes.WeaponLowerRequirements; break;
								case 5: w.WeaponAttributes.HitLeechHits += attributes.WeaponHitLifeLeech; break;
							}
						}
						#endregion

						int hue = w.GetElementalDamageHue();
						if( hue > 0 )
							w.Hue = hue;
					}
					#region Mondain's Legacy
					else if ( item is BaseShield )
					{
						BaseShield shield = (BaseShield) item;

						shield.Resource = resource;

						switch ( resource )
						{
							case CraftResource.AshWood: 
								shield.ArmorAttributes.LowerStatReq += 20; 
								break;

							case CraftResource.YewWood: 
								shield.Attributes.RegenHits += 1; 
								break;

							case CraftResource.Heartwood:
								switch ( Utility.Random( 7 ) )
								{
									case 0: shield.Attributes.BonusDex += 2; break;
									case 1: shield.Attributes.BonusStr += 2; break; 
									case 2: shield.Attributes.ReflectPhysical += 5; break;
									case 3: shield.Attributes.SpellChanneling = 1; shield.Attributes.CastSpeed = -1; break;
									case 4: shield.ArmorAttributes.SelfRepair += 2; break;			
									case 5: shield.PhysicalBonus += 5; break;
									case 6: shield.ColdBonus += 3; break;
								}
								break;

							case CraftResource.Bloodwood: 
								shield.Attributes.RegenHits += 2;
								shield.Attributes.Luck += 40;
								break;

							case CraftResource.Frostwood:
								shield.Attributes.SpellChanneling = 1; 
								shield.Attributes.CastSpeed = -1;
								break;
						}
					}
					#endregion
					else if( item is BaseArmor )	//Sanity
					{
						((BaseArmor)item).Resource = resource;

						#region Mondain's Legacy
						BaseArmor armor = (BaseArmor) item;

						if ( resource != CraftResource.Heartwood )
						{
							armor.Attributes.WeaponDamage += attributes.ArmorDamage;
							armor.Attributes.AttackChance += attributes.ArmorHitChance;
							armor.Attributes.RegenHits += attributes.ArmorRegenHits;				
							armor.ArmorAttributes.MageArmor += attributes.ArmorMage;
						}
						else
						{
							switch ( Utility.Random( 5 ) )
							{
								case 0: armor.Attributes.WeaponDamage += attributes.ArmorDamage; break;
								case 1: armor.Attributes.AttackChance += attributes.ArmorHitChance; break;
								case 2: armor.ArmorAttributes.MageArmor += attributes.ArmorMage; break;			 
								case 3: armor.Attributes.Luck += attributes.ArmorLuck; break;
								case 4: armor.ArmorAttributes.LowerStatReq += attributes.ArmorLowerRequirements; break;
							}
						}
						#endregion
					}

					break;
				}
				case EnhanceResult.Failure:
				{
					if ( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
						return EnhanceResult.NoResources;

					break;
				}
			}

			return res;
		}
示例#20
0
        public static bool CheckDoubleClick(
            this Item item,
            Mobile from,
            bool handle        = true,
            bool allowDead     = false,
            int range          = 20,
            bool packOnly      = false,
            bool inTrade       = false,
            AccessLevel access = AccessLevel.Player)
        {
            if (item == null || item.Deleted || from == null || from.Deleted)
            {
                return(false);
            }

            if (from.AccessLevel < access)
            {
                if (handle)
                {
                    from.SendMessage("You do not have sufficient access to use this item.");
                }

                return(false);
            }

            if (!from.CanSee(item))
            {
                if (handle)
                {
                    from.SendMessage("This item can't be seen.");
                    item.OnDoubleClickCantSee(from);
                }

                return(false);
            }

            if (!item.IsAccessibleTo(from))
            {
                if (handle)
                {
                    item.OnDoubleClickNotAccessible(from);
                }

                return(false);
            }

            if (item.InSecureTrade && !inTrade)
            {
                if (handle)
                {
                    item.OnDoubleClickSecureTrade(from);
                }

                return(false);
            }

            if (!from.Alive && !allowDead)
            {
                if (handle)
                {
                    item.OnDoubleClickDead(from);
                }

                return(false);
            }

            if (range >= 0 && !from.InRange(item.GetWorldLocation(), range) && !packOnly)
            {
                if (handle)
                {
                    if (range > 0)
                    {
                        from.SendMessage("You must be within {0:#,0} paces to use this item.", range);
                    }
                    else
                    {
                        from.SendMessage("You must be standing on this item to use it.");
                    }

                    item.OnDoubleClickOutOfRange(from);
                }

                return(false);
            }

            if (packOnly && (from.Backpack == null || !item.IsChildOf(from.Backpack)))
            {
                if (handle)
                {
                    // This item must be in your backpack.
                    from.SendLocalizedMessage(1054107);
                }

                return(false);
            }

            return(true);
        }
		public override bool CheckNonlocalLift( Mobile from, Item item )
		{
			if ( item.IsChildOf( this.Backpack ) )
			{
				if ( IsOwner( from ) )
				{
					return true;
				}
				else
				{
					SayTo( from, 503223 ); // If you'd like to purchase an item, just ask.
					return false;
				}
			}
			else if ( BaseHouse.NewVendorSystem && IsOwner( from ) )
			{
				return true;
			}

			return base.CheckNonlocalLift( from, item );
		}
示例#22
0
        public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
        {
            if( this != null && from != null && item != null && from is PlayerMobile )
            {
                PlayerMobile pm = from as PlayerMobile;

                if( pm != this && pm.AccessLevel < AccessLevel.GameMaster && !pm.Hidden && pm.Feats.GetFeatLevel(FeatList.PlantEvidence) > 0 && pm.Alive && this.Alive && pm.InLOS( this ) && pm.InRange( this.Location, 1 ) && pm.CanSee( this ) )
                {
                    if( Utility.RandomMinMax( 1, 100 ) < ( pm.Feats.GetFeatLevel(FeatList.PlantEvidence) * 33 ) )
                        return true;

                    else
                    {
                        string notice = String.Format( "You notice {0} trying to drop something in {1}'s backpack.", pm.Name, this.Name );

                        IPooledEnumerable eable = this.Map.GetClientsInRange( this.Location, 8 );

                        foreach ( NetState ns in eable )
                        {
                            if ( ns != pm.NetState )
                                ns.Mobile.SendMessage( notice );
                        }

                        eable.Free();
                    }
                }
            }

            if ( !base.CheckNonlocalDrop( from, item, target ) )
                return false;

            if ( from.AccessLevel >= AccessLevel.GameMaster )
                return true;

            Container pack = this.Backpack;
            if ( from == this && this.HasTrade && ( target == pack || target.IsChildOf( pack ) ) )
            {
                BounceInfo bounce = item.GetBounce();

                if ( bounce != null && bounce.m_Parent is Item )
                {
                    Item parent = (Item) bounce.m_Parent;

                    if ( parent == pack || parent.IsChildOf( pack ) )
                        return true;
                }

                SendLocalizedMessage( 1004041 ); // You can't do that while you have a trade pending.
                return false;
            }

            return true;
        }
示例#23
0
        public override bool CheckNonlocalDrop(Mobile from, Item item, Item target)
        {
            if (!base.CheckNonlocalDrop(from, item, target))
                return false;

            if (from.AccessLevel >= AccessLevel.GameMaster)
                return true;

            Container pack = this.Backpack;
            if (from == this && this.HasTrade && (target == pack || target.IsChildOf(pack)))
            {
                BounceInfo bounce = item.GetBounce();

                if (bounce != null && bounce.m_Parent is Item)
                {
                    Item parent = (Item)bounce.m_Parent;

                    if (parent == pack || parent.IsChildOf(pack))
                        return true;
                }

                SendLocalizedMessage(1004041); // You can't do that while you have a trade pending.
                return false;
            }

            return true;
        }
示例#24
0
		public static EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage )
		{
			if( item == null )
				return EnhanceResult.BadItem;

			if( !item.IsChildOf( from.Backpack ) )
				return EnhanceResult.NotInBackpack;

			if( !(item is BaseArmor) && !(item is BaseWeapon) )
				return EnhanceResult.BadItem;

			if( CraftResources.IsStandard( resource ) )
				return EnhanceResult.BadResource;

			int num = craftSystem.CanCraft( from, tool, item.GetType() );
			
			if ( num > 0 )
			{
				resMessage = num;
				return EnhanceResult.None;
			}

			CraftItem craftItem = craftSystem.CraftItems.SearchFor( item.GetType() );

			if ( craftItem == null || craftItem.Resources.Count == 0 )
				return EnhanceResult.BadItem;

			bool allRequiredSkills = false;
			if( craftItem.GetSuccessChance( from, resType, craftSystem, false, ref allRequiredSkills ) <= 0.0 )
				return EnhanceResult.NoSkill;

			CraftResourceInfo info = CraftResources.GetInfo( resource );

			if( info == null || info.ResourceTypes.Length == 0 )
				return EnhanceResult.BadResource;

			CraftAttributeInfo attributes = info.AttributeInfo;

			if( attributes == null )
				return EnhanceResult.BadResource;

			int resHue = 0, maxAmount = 0;

			if( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref resMessage ) )
				return EnhanceResult.NoResources;

			if( craftSystem is DefBlacksmithy )
			{
				AncientSmithyHammer hammer = from.FindItemOnLayer( Layer.OneHanded ) as AncientSmithyHammer;
				if( hammer != null )
				{
					hammer.UsesRemaining--;
					if( hammer.UsesRemaining < 1 )
						hammer.Delete();
				}
			}

			int phys = 0, fire = 0, cold = 0, pois = 0, nrgy = 0;
			int dura = 0, dinc = 0;
			int baseChance = 0;

			bool physBonus = false;
			bool fireBonus = false;
			bool coldBonus = false;
			bool nrgyBonus = false;
			bool poisBonus = false;
			bool duraBonus = false;
			bool dincBonus = false;

			double arms = from.Skills[SkillName.ArmsLore].Base;

			if( item is BaseWeapon )
			{
				BaseWeapon weapon = (BaseWeapon)item;

				if( !CraftResources.IsStandard( weapon.Resource ) )
					return EnhanceResult.AlreadyEnhanced;

				if( arms >= 100.1 )
					baseChance = Utility.RandomMinMax( 2, 5 );
				else if( arms >= 80.1 && arms <= 100 )
					baseChance = Utility.RandomMinMax( 8, 14 );
				else if( arms >= 50 && arms <= 80 )
					baseChance = Utility.RandomMinMax( 16, 20 );
				else
					baseChance = 25;
			}
			else
			{
				BaseArmor armor = (BaseArmor)item;

				if( !CraftResources.IsStandard( armor.Resource ) )
					return EnhanceResult.AlreadyEnhanced;

				if( arms >= 100.1 )
					baseChance = Utility.RandomMinMax( 2, 5 );
				else if( arms >= 80.1 && arms <= 100 )
					baseChance = Utility.RandomMinMax( 8, 14 );
				else if( arms >= 50 && arms <= 80 )
					baseChance = Utility.RandomMinMax( 16, 20 );
				else
					baseChance = 25;

				phys = armor.PhysicalResistance;
				fire = armor.FireResistance;
				cold = armor.ColdResistance;
				pois = armor.PoisonResistance;
				nrgy = armor.EnergyResistance;

				dura = armor.MaxHitPoints;

				physBonus = (attributes.ArmorPhysicalResist > 4);
				fireBonus = (attributes.ArmorFireResist > 5);
				coldBonus = (attributes.ArmorColdResist > 7);
				nrgyBonus = (attributes.ArmorEnergyResist > 2);
				poisBonus = (attributes.ArmorPoisonResist > 1);

				duraBonus = (attributes.ArmorDurability > 0);
				dincBonus = true;
			}

			/*int skill = from.Skills[craftSystem.MainSkill].Fixed / 10;

			if ( skill >= 100 )
				baseChance -= (skill - 90) / 10;*/

			EnhanceResult res = EnhanceResult.Success;

			if( physBonus )
				CheckResult( ref res, baseChance + phys );

			if( fireBonus )
				CheckResult( ref res, baseChance + fire );

			if( coldBonus )
				CheckResult( ref res, baseChance + cold );

			if( nrgyBonus )
				CheckResult( ref res, baseChance + nrgy );

			if( poisBonus )
				CheckResult( ref res, baseChance + pois );

			if( duraBonus )
				CheckResult( ref res, baseChance + (dura / 20) );

			if( dincBonus )
				CheckResult( ref res, baseChance + (dinc / 5) );

			switch( res )
			{
				case EnhanceResult.Broken:
					{
						if( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
							return EnhanceResult.NoResources;

						item.Delete();
						break;
					}
				case EnhanceResult.Success:
					{
						if( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref resMessage ) )
							return EnhanceResult.NoResources;

						if( item is BaseWeapon )
							((BaseWeapon)item).Resource = resource;
						else
							((BaseArmor)item).Resource = resource;

						break;
					}
				case EnhanceResult.Failure:
					{
						if( !craftItem.ConsumeRes( from, resType, craftSystem, ref resHue, ref maxAmount, ConsumeType.Half, ref resMessage ) )
							return EnhanceResult.NoResources;

						break;
					}
			}

			return res;
		}