public void AddArcane(Item item) { if (item is IArcaneEquip) { IArcaneEquip eq = (IArcaneEquip)item; eq.CurArcaneCharges = eq.MaxArcaneCharges = 20; } item.Hue = ArcaneGem.DefaultArcaneHue; item.LootType = LootType.Newbied; AddItem(item); }
public static int[] ReadArcaneCharges(this IArcaneEquip obj, List <ClilocItemRec> reader) { if (!ClilocHelper.Contains(reader, 1061837)) { return new[] { 0, 0 } } ; var Params = ClilocHelper.GetParams(reader, 1061837); var charges = new int[] { Params[0], Params[1] }; return(charges); }
public static bool ConsumeCharges(Mobile from, int amount) { ArrayList items = from.Items; int avail = 0; for (int i = 0; i < items.Count; ++i) { object obj = items[i]; if (obj is IArcaneEquip) { IArcaneEquip eq = (IArcaneEquip)obj; if (eq.IsArcane) { avail += eq.CurArcaneCharges; } } } if (avail < amount) { return(false); } for (int i = 0; i < items.Count; ++i) { object obj = items[i]; if (obj is IArcaneEquip) { IArcaneEquip eq = (IArcaneEquip)obj; if (eq.IsArcane) { if (eq.CurArcaneCharges > amount) { eq.CurArcaneCharges -= amount; break; } else { amount -= eq.CurArcaneCharges; eq.CurArcaneCharges = 0; } } } } return(true); }
protected override void OnTarget(Mobile from, object target) // Override the protected OnTarget() for our feature { if (m_Deed.Deleted || m_Deed.RootParent != from) { return; } if (target is BaseClothing) { BaseClothing item = (BaseClothing)target; if (item is IArcaneEquip) { IArcaneEquip eq = (IArcaneEquip)item; if (eq.IsArcane) { from.SendLocalizedMessage(1005019); // This bless deed is for Clothes only. return; } } if (item.LootType == LootType.Blessed || item.BlessedFor == from || (Mobile.InsuranceEnabled && item.EraAOS && item.Insured)) // Check if its already newbied (blessed) { from.SendLocalizedMessage(1045113); // That item is already blessed } else if (item.LootType != LootType.Regular) { from.SendLocalizedMessage(1045114); // You can not bless that item } else if (!item.CanBeBlessed || item.RootParent != from) { from.SendLocalizedMessage(500509); // You cannot bless that object } else if (item is OrcishKinMask) { from.SendLocalizedMessage(500509); // You cannot bless that object } else { item.LootType = LootType.Blessed; from.SendLocalizedMessage(1010026); // You bless the item.... m_Deed.Delete(); // Delete the bless deed } } else { from.SendLocalizedMessage(500509); // You cannot bless that object } }
protected override void OnTarget(Mobile from, object target) // Override the protected OnTarget() for our feature { if (this.m_Deed.Deleted || this.m_Deed.RootParent != from) { return; } if (target is BaseClothing) { BaseClothing item = (BaseClothing)target; if (item is IArcaneEquip) { IArcaneEquip eq = (IArcaneEquip)item; if (eq.IsArcane) { from.SendLocalizedMessage(1005019); // This bless deed is for Clothes only. return; } } if (item.LootType == LootType.Blessed || item.BlessedFor == from || (Mobile.InsuranceEnabled && item.Insured)) // Check if its already newbied (blessed) { from.SendLocalizedMessage(1045113); // That item is already blessed } else if (item.LootType != LootType.Regular || (Siege.SiegeShard && Server.SkillHandlers.Imbuing.GetTotalMods(item) > 0) || item.NegativeAttributes.Prized > 0) { from.SendLocalizedMessage(1045114); // You can not bless that item } else if (!item.CanBeBlessed || item.RootParent != from) { from.SendLocalizedMessage(500509); // You cannot bless that object } else { item.LootType = LootType.Blessed; from.SendLocalizedMessage(1010026); // You bless the item.... this.m_Deed.Delete(); // Delete the bless deed } } else { from.SendLocalizedMessage(500509); // You cannot bless that object } }
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 (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 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, ITool tool, Item item, CraftResource resource, Type resType, ref object resMessage) { if (item == null) { return(EnhanceResult.BadItem); } if (item is GargishNecklace || item is GargishEarrings) { return(EnhanceResult.BadItem); } if (!item.IsChildOf(from.Backpack)) { return(EnhanceResult.NotInBackpack); } IResource ires = item as IResource; if (!CanEnhance(item) || ires == null) { return(EnhanceResult.BadItem); } if (item is IArcaneEquip) { IArcaneEquip eq = (IArcaneEquip)item; if (eq.IsArcane) { return(EnhanceResult.BadItem); } } if (item is BaseWeapon && Spells.Mysticism.EnchantSpell.IsUnderSpellEffects(from, (BaseWeapon)item)) { return(EnhanceResult.Enchanted); } 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 (IsSpecial(item, craftSystem)) { craftItem = craftSystem.CraftItems.SearchForSubclass(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 (!CraftResources.IsStandard(ires.Resource)) { return(EnhanceResult.AlreadyEnhanced); } 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 (weapon.ExtendedWeaponAttributes.AssassinHoned > 0) { return(EnhanceResult.BadItem); } 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 if (item is BaseArmor) { BaseArmor armor = (BaseArmor)item; 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; } else if (item is FishingPole) { FishingPole pole = (FishingPole)item; baseChance = 20; luck = pole.Attributes.Luck; 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 (craftItem.CaddelliteCraft) { Caddellite.TryInfuse(from, item, craftSystem); } if (item is IResource) { ((IResource)item).Resource = resource; } if (item is BaseWeapon) { BaseWeapon w = (BaseWeapon)item; w.DistributeMaterialBonus(attributes); int hue = w.GetElementalDamageHue(); if (hue > 0) { w.Hue = hue; } } else if (item is BaseArmor) { ((BaseArmor)item).DistributeMaterialBonus(attributes); } else if (item is FishingPole) { ((FishingPole)item).DistributeMaterialBonus(attributes); } 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 void OnTarget(Mobile from, object obj) { if (!IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } if (obj is IArcaneEquip && obj is Item) { Item item = (Item)obj; IArcaneEquip eq = (IArcaneEquip)obj; if (!item.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } int charges = GetChargesFor(from); if (eq.IsArcane) { if (eq.CurArcaneCharges >= eq.MaxArcaneCharges) { from.SendMessage("That item is already fully charged."); } else { if (eq.CurArcaneCharges <= 0) { item.Hue = DefaultArcaneHue; } if ((eq.CurArcaneCharges + charges) > eq.MaxArcaneCharges) { eq.CurArcaneCharges = eq.MaxArcaneCharges; } else { eq.CurArcaneCharges += charges; } from.SendMessage("You recharge the item."); Delete(); } } else if (from.Skills[SkillName.Tailoring].Value >= 80.0) { bool isExceptional = false; if (item is BaseClothing) { isExceptional = (((BaseClothing)item).Quality == ClothingQuality.Exceptional); } else if (item is BaseArmor) { isExceptional = (((BaseArmor)item).Quality == ArmorQuality.Exceptional); } else if (item is BaseWeapon) { isExceptional = (((BaseWeapon)item).Quality == WeaponQuality.Exceptional); } if (isExceptional) { if (item is BaseClothing) { ((BaseClothing)item).Crafter = from; // erl: turn it non-newbified if (((BaseClothing)item).LootType == LootType.Newbied) { ((BaseClothing)item).LootType = LootType.Regular; } } else if (item is BaseArmor) { ((BaseArmor)item).Crafter = from; } else if (item is BaseWeapon) { ((BaseWeapon)item).Crafter = from; } eq.CurArcaneCharges = eq.MaxArcaneCharges = charges; item.Hue = DefaultArcaneHue; from.SendMessage("You enhance the item with your gem."); Delete(); } else { from.SendMessage("Only exceptional items can be enhanced with the gem."); } } else { from.SendMessage("You do not have enough skill in tailoring to enhance the item."); } } else { from.SendMessage("You cannot use the gem on that."); } }
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 (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 (IsSpecial(item, craftSystem)) { craftItem = craftSystem.CraftItems.SearchForSubclass(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); } if (weapon.ExtendedWeaponAttributes.AssassinHoned > 0) { return(EnhanceResult.BadItem); } 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; #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 void OnTarget(Mobile from, object obj) { if (!this.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } if (obj is IArcaneEquip && obj is Item) { Item item = (Item)obj; CraftResource resource = CraftResource.None; if (item is BaseClothing) { resource = ((BaseClothing)item).Resource; } else if (item is BaseArmor) { resource = ((BaseArmor)item).Resource; } else if (item is BaseWeapon) // Sanity, weapons cannot recieve gems... { resource = ((BaseWeapon)item).Resource; } IArcaneEquip eq = (IArcaneEquip)obj; if (!item.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } else if (item.LootType == LootType.Blessed) { from.SendMessage("You can only use this on exceptionally crafted robes, thigh boots, cloaks, or leather gloves."); return; } else if (resource != CraftResource.None && resource != CraftResource.RegularLeather) { from.SendLocalizedMessage(1049690); // Arcane gems can not be used on that type of leather. return; } int charges = this.GetChargesFor(from); if (eq.IsArcane) { if (eq.CurArcaneCharges >= eq.MaxArcaneCharges) { from.SendMessage("That item is already fully charged."); } else { if (eq.CurArcaneCharges <= 0) { item.Hue = DefaultArcaneHue; } if ((eq.CurArcaneCharges + charges) > eq.MaxArcaneCharges) { eq.CurArcaneCharges = eq.MaxArcaneCharges; } else { eq.CurArcaneCharges += charges; } from.SendMessage("You recharge the item."); if (this.Amount <= 1) { this.Delete(); } else { this.Amount--; } } } else if (from.Skills[SkillName.Tailoring].Value >= 80.0) { bool isExceptional = false; if (item is BaseClothing) { isExceptional = (((BaseClothing)item).Quality == ClothingQuality.Exceptional); } else if (item is BaseArmor) { isExceptional = (((BaseArmor)item).Quality == ArmorQuality.Exceptional); } else if (item is BaseWeapon) { isExceptional = (((BaseWeapon)item).Quality == WeaponQuality.Exceptional); } if (isExceptional) { if (item is BaseClothing) { ((BaseClothing)item).Quality = ClothingQuality.Regular; ((BaseClothing)item).Crafter = from; } else if (item is BaseArmor) { ((BaseArmor)item).Quality = ArmorQuality.Regular; ((BaseArmor)item).Crafter = from; } else if (item is BaseWeapon) // Sanity, weapons cannot recieve gems... { ((BaseWeapon)item).Quality = WeaponQuality.Regular; ((BaseWeapon)item).Crafter = from; } eq.CurArcaneCharges = eq.MaxArcaneCharges = charges; item.Hue = DefaultArcaneHue; from.SendMessage("You enhance the item with your gem."); if (this.Amount <= 1) { this.Delete(); } else { this.Amount--; } } else { from.SendMessage("Only exceptional items can be enhanced with the gem."); } } else { from.SendMessage("You do not have enough skill in tailoring to enhance the item."); } } else { from.SendMessage("You can only use this on exceptionally crafted robes, thigh boots, cloaks, or leather gloves."); } }
public void OnTarget(Mobile from, object obj) { if (!IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042010); // You must have the object in your backpack to use it. return; } if (obj is IArcaneEquip && obj is Item) { Item item = (Item)obj; CraftResource resource = CraftResource.None; if (item is BaseClothing) { resource = ((BaseClothing)item).Resource; } else if (item is BaseArmor) { resource = ((BaseArmor)item).Resource; } else if (item is BaseWeapon) // Sanity, weapons cannot recieve gems... { resource = ((BaseWeapon)item).Resource; } IArcaneEquip eq = (IArcaneEquip)obj; if (!item.IsChildOf(from.Backpack)) { from.SendMessage("You may only target items in your backpack."); return; } int charges = GetChargesFor(from); if (eq.IsArcane) { if (eq.CurArcaneCharges > 0) { from.SendMessage("This item still has charges left."); } else { item.Hue = eq.TempHue; if (charges >= eq.MaxArcaneCharges) { eq.CurArcaneCharges = eq.MaxArcaneCharges; from.SendMessage("Your skill in tailoring allows you to fully recharge the item."); } else { eq.CurArcaneCharges += charges; from.SendMessage("You are only able to restore some of the charges."); } Consume(); } } else if (from.Skills[SkillName.Tailoring].Value >= 60.0) { bool isExceptional = false; if (item is BaseClothing) { isExceptional = ((BaseClothing)item).Quality == ItemQuality.Exceptional; } else if (item is BaseArmor) { isExceptional = ((BaseArmor)item).Quality == ItemQuality.Exceptional; } else if (item is BaseWeapon) { isExceptional = ((BaseWeapon)item).Quality == ItemQuality.Exceptional; } if (isExceptional) { if (item is BaseClothing) { BaseClothing cloth = item as BaseClothing; cloth.Quality = ItemQuality.Normal; cloth.Crafter = from; } else if (item is BaseArmor) { BaseArmor armor = item as BaseArmor; if (armor.IsImbued || armor.IsArtifact || RunicReforging.GetArtifactRarity(armor) > 0) { from.SendLocalizedMessage(1049690); // Arcane gems cannot be used on that type of leather. return; } armor.Quality = ItemQuality.Normal; armor.Crafter = from; armor.PhysicalBonus = 0; armor.FireBonus = 0; armor.ColdBonus = 0; armor.PoisonBonus = 0; armor.EnergyBonus = 0; } else if (item is BaseWeapon) // Sanity, weapons cannot recieve gems... { BaseWeapon weapon = item as BaseWeapon; weapon.Quality = ItemQuality.Normal; weapon.Crafter = from; } eq.CurArcaneCharges = eq.MaxArcaneCharges = charges; item.Hue = DefaultArcaneHue; if (item.LootType == LootType.Blessed) { item.LootType = LootType.Regular; } Consume(); } else { from.SendMessage("You can only use this on exceptionally crafted robes, thigh boots, cloaks, or leather gloves."); } } else { from.SendMessage("You do not have enough skill in tailoring to use this."); } } else { from.SendMessage("You can only use this on exceptionally crafted robes, thigh boots, cloaks, or leather gloves."); } }
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 = 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 = 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 = 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); }
public void OnTarget(Mobile from, object obj) { if (!IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } if (obj is CreationOrb) { Item item = (Item)obj; CreationOrb eq = (CreationOrb)obj; if (!item.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } eq.UsesRemaining++; from.SendMessage("You imbue the item with arcane energy."); Consume(); } if (obj is BaseWand) { Item item = (Item)obj; BaseWand wn = (BaseWand)obj; if (!item.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } if (wn.Charges + 2 < 50) { wn.Charges += 2; } else { wn.Charges = 50; } from.SendMessage("You imbue the item with arcane energy."); Consume(); } if (obj is IArcaneEquip && obj is Item) { Item item = (Item)obj; IArcaneEquip eq = (IArcaneEquip)obj; if (!item.IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } int charges = GetChargesFor(from); if (eq.IsArcane) { if (eq.CurArcaneCharges >= eq.MaxArcaneCharges) { from.SendMessage("That item is already fully charged."); } else { if (eq.CurArcaneCharges <= 0) { item.Hue = DefaultArcaneHue; } if ((eq.CurArcaneCharges + charges) > eq.MaxArcaneCharges) { eq.CurArcaneCharges = eq.MaxArcaneCharges; } else { eq.CurArcaneCharges += charges; } from.SendMessage("You recharge the item."); Consume(); } } else if (from.Skills[SkillName.Tailoring].Value >= 80.0) { bool isExceptional = false; if (item is BaseClothing) { isExceptional = (((BaseClothing)item).Quality == ClothingQuality.Exceptional); } else if (item is BaseArmor) { isExceptional = (((BaseArmor)item).Quality == ArmorQuality.Exceptional); } else if (item is BaseWeapon) { isExceptional = (((BaseWeapon)item).Quality == WeaponQuality.Exceptional); } if (isExceptional) { if (item is BaseClothing) { ((BaseClothing)item).Crafter = from; } else if (item is BaseArmor) { ((BaseArmor)item).Crafter = from; } else if (item is BaseWeapon) { ((BaseWeapon)item).Crafter = from; } eq.CurArcaneCharges = eq.MaxArcaneCharges = charges; item.Hue = DefaultArcaneHue; from.SendMessage("You enhance the item with your gem."); Consume(); } else { from.SendMessage("Only exceptional items can be enhanced with the gem."); } } else { from.SendMessage("You do not have enough skill in tailoring to enhance the item."); } } else { from.SendMessage("You cannot use the gem on that."); } }