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." ); }
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 ) ); }
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); }
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; }
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)); } }
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; }
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; }
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; }
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(); } } }
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; }
/// <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; }
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; } }
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; }
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 ); }
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; }
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; }
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; }