public int GetResourceAmount(Type resourceType) { int resourceCount = 0; Item[] items; if (m_From.Backpack != null) { if (m_CraftSystem is DefCarpentry || m_CraftSystem is DefTailoring) { CraftResource resource = CraftResources.GetFromType(resourceType); CraftResourceInfo resourceInfo = CraftResources.GetInfo(resource); Type[] typeList = resourceInfo.ResourceTypes; for (int i = 0; i < typeList.Length; ++i) { items = m_From.Backpack.FindItemsByType(typeList[i], true); for (int j = 0; j < items.Length; ++j) { resourceCount += items[j].Amount; } } } else { items = m_From.Backpack.FindItemsByType(resourceType, true); for (int i = 0; i < items.Length; ++i) { resourceCount += items[i].Amount; } } } return(resourceCount); }
public static EnhanceResult Invoke(Mobile from, CraftSystem craftSystem, IBaseTool 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) { AncientSmithHammerWeapon hammer = from.FindItemOnLayer(Layer.OneHanded) as AncientSmithHammerWeapon; 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; //change hue somehow? } 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); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } double difficulty = 0.0; switch (resource) { default: difficulty = 0.0; break; case CraftResource.Cuivre: difficulty = 40.0; break; case CraftResource.Bronze: difficulty = 40.0; break; case CraftResource.Acier: difficulty = 60.0; break; case CraftResource.Argent: difficulty = 60.0; break; case CraftResource.Or: difficulty = 60.0; break; case CraftResource.Mytheril: difficulty = 80.0; break; case CraftResource.Luminium: difficulty = 80.0; break; case CraftResource.Obscurium: difficulty = 80.0; break; case CraftResource.Mystirium: difficulty = 90.0; break; case CraftResource.Dominium: difficulty = 90.0; break; case CraftResource.Eclarium: difficulty = 100.0; break; case CraftResource.Venarium: difficulty = 90.0; break; case CraftResource.Athenium: difficulty = 100.0; break; case CraftResource.Umbrarium: difficulty = 100.0; break; } if (difficulty > from.Skills[SkillName.Excavation].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
public override void OnResponse(NetState state, RelayInfo info) { Mobile from = state.Mobile; if (!BaseTool.CheckAccessible(m_Tool, from, true)) { return; } switch (info.ButtonID) { case 0: break; case 1: // prefix from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, true)); break; case 2: // suffix from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, false)); break; case 3: // Reforge Item { if (!RunicReforging.CanReforge(from, m_ToReforge, m_Tool.CraftSystem)) { return; } int totalCharges = GetTotalCharges(); if (m_Tool.UsesRemaining >= totalCharges) { CraftResourceInfo resInfo = CraftResources.GetInfo(m_Tool.Resource); if (resInfo == null) { return; } CraftAttributeInfo attrs = resInfo.AttributeInfo; int min = 10; int max = 80; if (min < 10) { min = 10; } if (max > 100) { max = 100; } int budget = GetBudget(); ReforgedPrefix prefix = ReforgedPrefix.None; ReforgedSuffix suffix = ReforgedSuffix.None; if ((m_Options & ReforgingOption.GrandArtifice) != 0) { // choosing name 1 if ((m_Options & ReforgingOption.InspiredArtifice) != 0) { prefix = m_Prefix; if (prefix == ReforgedPrefix.None) { from.SendLocalizedMessage(1152287); // Re-forging failed. You did not choose a name! Please try again. return; } } else { // Not choosing name 1 or 2 if ((m_Options & ReforgingOption.SublimeArtifice) == 0) { // random prefix AND suffix if ((m_Options & ReforgingOption.ExaltedArtifice) != 0) { prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge, budget); suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix); } else // random prefix OR suffix { if (0.5 > Utility.RandomDouble()) { prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge, budget); } else { suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix); } } } } } if ((m_Options & ReforgingOption.ExaltedArtifice) != 0) { if ((m_Options & ReforgingOption.SublimeArtifice) != 0) { suffix = m_Suffix; if (suffix == ReforgedSuffix.None) { from.SendLocalizedMessage(1152287); // Re-forging failed. You did not choose a name! Please try again. return; } } else { suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix); budget = Math.Min(800, budget + 50); } } // 50% chance to switch prefix/suffix around if ((prefix != ReforgedPrefix.None || suffix != ReforgedSuffix.None) && 0.5 > Utility.RandomDouble()) { int pre = (int)prefix; int suf = (int)suffix; prefix = (ReforgedPrefix)suf; suffix = (ReforgedSuffix)pre; } RunicReforging.ApplyReforgedProperties(m_ToReforge, prefix, suffix, budget, min, max, RunicReforging.GetPropertyCount(m_Tool), 0, m_Tool, m_Options); OnAfterReforged(m_ToReforge); from.SendLocalizedMessage(1152286); // You re-forge the item! from.PlaySound(0x665); m_Tool.UsesRemaining -= totalCharges; if (m_Tool.UsesRemaining <= 0) { m_Tool.Delete(); from.SendLocalizedMessage(1044038); // You have worn out your tool! } } break; } case 4: from.SendGump(new ReforgingHelpGump()); break; default: // Option { ReforgingOption option = Options[info.ButtonID - 100]; if (HasMetPrerequisite(option)) { if ((m_Options & option) == 0) { m_Options |= option; if (m_Prefix != ReforgedPrefix.None && !RunicReforging.HasSelection((int)m_Prefix, m_ToReforge, m_Tool, m_Options, -1, -1)) { m_Prefix = ReforgedPrefix.None; m_Context.Prefix = ReforgedPrefix.None; } if (m_Suffix != ReforgedSuffix.None && !RunicReforging.HasSelection((int)m_Suffix, m_ToReforge, m_Tool, m_Options, -1, -1)) { m_Suffix = ReforgedSuffix.None; m_Context.Suffix = ReforgedSuffix.None; } } else { m_Options ^= option; InvalidatePrerequisite(option); } m_Context.Contexts[m_Tool] = m_Options; } from.SendGump(new RunicReforgingGump(from, m_ToReforge, m_Tool)); break; } } }
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); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (Ethics.Ethic.IsImbued(item)) { return(SmeltResult.Invalid); } if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = this.m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } //daat99 OWLTR start - smelting difficulty double difficulty = daat99.ResourceHelper.GetMinSkill(resource); //daat99 OWLTR end - smelting difficulty if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
public static EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref TextDefinition resMessage ) { if (item == null) { return(EnhanceResult.BadItem); } if (!item.IsChildOf(from.Backpack)) { return(EnhanceResult.NotInBackpack); } if (item is not BaseArmor && item is not BaseWeapon) { return(EnhanceResult.BadItem); } if (item is IArcaneEquip eq && eq.IsArcane) { return(EnhanceResult.BadItem); } if (CraftResources.IsStandard(resource)) { return(EnhanceResult.BadResource); } var num = craftSystem.CanCraft(from, tool, item.GetType()); if (num > 0) { resMessage = num; return(EnhanceResult.None); } var craftItem = craftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(EnhanceResult.BadItem); } if (craftItem.GetSuccessChance(from, resType, craftSystem, false, out _) <= 0.0) { return(EnhanceResult.NoSkill); } var info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(EnhanceResult.BadResource); } var 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) { if (from.FindItemOnLayer(Layer.OneHanded) is AncientSmithyHammer hammer) { hammer.UsesRemaining--; if (hammer.UsesRemaining < 1) { hammer.Delete(); } } } int phys = 0, fire = 0, cold = 0, pois = 0, nrgy = 0; int dura, luck, lreq, dinc = 0; int baseChance; var physBonus = false; bool fireBonus; bool coldBonus; bool nrgyBonus; bool poisBonus; bool duraBonus; bool luckBonus; bool lreqBonus; bool dincBonus; if (item is BaseWeapon weapon) { 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 { var 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; } var skill = from.Skills[craftSystem.MainSkill].Fixed / 10; if (skill >= 100) { baseChance -= (skill - 90) / 10; } var 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 w) { w.Resource = resource; var hue = w.GetElementalDamageHue(); if (hue > 0) { w.Hue = hue; } } 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); }
private static bool DoResmelt(CraftSystem system, Mobile from, Item item, CraftResource resource, bool playSound) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(false); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(false); } if (!CheckResourceSkill(info.Resource, from.Skills[SkillName.Mining].Value)) { return(false); } CraftItem craftItem = system.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Ressources.Count == 0) { return(false); } CraftRes craftResource = craftItem.Ressources.GetAt(0); if (craftResource.Amount < 2) { return(false); // Not enough metal to resmelt } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); if (playSound) { from.PlaySound(0x2A); from.PlaySound(0x240); } return(true); } catch { } 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)) { 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); }
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); } 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; duraBonus = attributes.WeaponDurability > 0; lreqBonus = attributes.WeaponLowerRequirements > 0; dincBonus = dinc > 0; } else { BaseArmor armor = (BaseArmor)item; if (!CraftResources.IsStandard(armor.Resource)) { return(EnhanceResult.AlreadyEnhanced); } baseChance = 20; dura = armor.MaxHitPoints; duraBonus = attributes.ArmorDurability > 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 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); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (Ethics.Ethic.IsImbued(item)) { return(SmeltResult.Invalid); } if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } double difficulty = 0.0; switch (resource) { case CraftResource.MRusty: difficulty = 50.0; break; case CraftResource.MOldcopper: difficulty = 60.0; break; case CraftResource.MDullcopper: difficulty = 65.0; break; case CraftResource.MShadow: difficulty = 70.0; break; case CraftResource.MCopper: difficulty = 75.0; break; case CraftResource.MBronze: difficulty = 80.0; break; case CraftResource.MGold: difficulty = 85.0; break; case CraftResource.MRose: difficulty = 87.0; break; case CraftResource.MAgapite: difficulty = 90.0; break; case CraftResource.MValorite: difficulty = 90.0; break; case CraftResource.MBloodrock: difficulty = 93.0; break; case CraftResource.MVerite: difficulty = 95.0; break; case CraftResource.MSilver: difficulty = 95.0; break; case CraftResource.MDragon: difficulty = 95.0; break; case CraftResource.MTitan: difficulty = 95.0; break; case CraftResource.MCrystaline: difficulty = 95.0; break; case CraftResource.MKrynite: difficulty = 95.0; break; case CraftResource.MVulcan: difficulty = 95.0; break; case CraftResource.MBloodcrest: difficulty = 95.0; break; case CraftResource.MElvin: difficulty = 95.0; break; case CraftResource.MAcid: difficulty = 95.0; break; case CraftResource.MAqua: difficulty = 95.0; break; case CraftResource.MEldar: difficulty = 95.0; break; case CraftResource.MGlowing: difficulty = 95.0; break; case CraftResource.MGorgan: difficulty = 95.0; break; case CraftResource.MSteel: difficulty = 95.5; break; case CraftResource.MSandrock: difficulty = 95.0; break; case CraftResource.MMytheril: difficulty = 97.5; break; case CraftResource.MBlackrock: difficulty = 98.0; break; } if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } double difficulty = 0.0; switch (resource) { case CraftResource.DullCopper: difficulty = 65.0; break; case CraftResource.ShadowIron: difficulty = 70.0; break; case CraftResource.Copper: difficulty = 75.0; break; case CraftResource.Bronze: difficulty = 80.0; break; case CraftResource.Gold: difficulty = 85.0; break; case CraftResource.Agapite: difficulty = 90.0; break; case CraftResource.Verite: difficulty = 95.0; break; case CraftResource.Valorite: difficulty = 99.0; break; } if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } if (item.Amount > 1) { item.Amount--; } else { item.Delete(); } #region Add to pack or ground if overweight //Taran: Check to see if player is overweight. If they are and the item drops to the //ground then a check is made to see if it can be stacked. If it can't and more than //20 items of the same type exist in the same tile then the last item gets removed. This //check is made so thousands of items can't exist in 1 tile and crash people in the same area. if (from.AddToBackpack(ingot)) { from.SendAsciiMessage("You put the {0} in your pack.", ingot.Name ?? CliLoc.LocToString(ingot.LabelNumber)); } else if (!ingot.Deleted) { IPooledEnumerable eable = from.Map.GetItemsInRange(from.Location, 0); int amount = 0; Item toRemove = null; foreach (Item i in eable) { if (i != ingot && i.ItemID == ingot.ItemID) { if (i.StackWith(from, ingot, false)) { toRemove = ingot; break; } amount++; } } from.SendAsciiMessage("You are overweight and put the {0} on the ground.", ingot.Name ?? CliLoc.LocToString(ingot.LabelNumber)); if (toRemove != null) { toRemove.Delete(); } else if (amount >= 5 && amount < 20) { from.LocalOverheadMessage(MessageType.Regular, 906, true, string.Format("{0} identical items on the ground detected, no more than 20 is allowed!", amount)); } else if (amount >= 20) { from.LocalOverheadMessage(MessageType.Regular, 906, true, "Too many identical items on the ground, removing!"); ingot.Delete(); } eable.Free(); } #endregion from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
public override void OnResponse(NetState state, RelayInfo info) { Mobile from = state.Mobile; switch (info.ButtonID) { case 0: break; case 1: // prefix from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, true)); break; case 2: // suffix from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, false)); break; case 3: // Reforge Item { if (!RunicReforging.CanReforge(from, m_ToReforge, m_Tool.CraftSystem)) { return; } int totalCharges = GetTotalCharges(); if (m_Tool.UsesRemaining >= totalCharges) { CraftResourceInfo resInfo = CraftResources.GetInfo(m_Tool.Resource); if (resInfo == null) { return; } CraftAttributeInfo attrs = resInfo.AttributeInfo; int budget = GetBudget(); int min = 10; int max = 40; if (attrs != null) { min = attrs.RunicMinIntensity; max = attrs.RunicMaxIntensity; } if (min < 10) { min = 10; } if (max > 100) { max = 100; } if (m_Prefix == ReforgedPrefix.None && (m_Options & ReforgingOption.GrandArtifice) != 0) { m_Prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge); budget = Math.Min(800, budget + 50); } if (m_Suffix == ReforgedSuffix.None && (m_Options & ReforgingOption.ExaltedArtifice) != 0) { m_Suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, m_Prefix); budget = Math.Min(800, budget + 50); } int maxprops; if (attrs != null) { maxprops = Utility.RandomMinMax(attrs.RunicMinAttributes, attrs.RunicMaxAttributes); } else { maxprops = Math.Min(5, (budget / 110) + 1); } if (maxprops == 5 && 0.25 > Utility.RandomDouble()) { maxprops = 6; } if (maxprops == 6 && budget >= 650 && 0.10 > Utility.RandomDouble()) { maxprops = 7; } RunicReforging.ApplyReforgedProperties(m_ToReforge, m_Prefix, m_Suffix, true, budget, min, max, maxprops, 0, m_Tool, m_Options); OnAfterReforged(m_ToReforge); from.SendLocalizedMessage(1152286); // You re-forge the item! m_Tool.UsesRemaining -= totalCharges; if (m_Tool != null && m_Tool.CraftSystem != null) { m_Tool.CraftSystem.PlayCraftEffect(from); } if (m_Tool.UsesRemaining <= 0) { m_Tool.Delete(); from.SendLocalizedMessage(1044038); // You have worn out your tool! } } break; } case 4: from.SendGump(new ReforgingHelpGump()); break; default: // Option { ReforgingOption option = Options[info.ButtonID - 100]; if (HasMetPrerequisite(option)) { if ((m_Options & option) == 0) { m_Options |= option; } else { m_Options ^= option; InvalidatePrerequisite(option); } } from.SendGump(new RunicReforgingGump(from, m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix)); break; } } }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = Craft.CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Ressources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Ressources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } double difficulty = 0.0; switch (resource) { case CraftResource.DullCopper: difficulty = 65.0; break; case CraftResource.ShadowIron: difficulty = 70.0; break; case CraftResource.Copper: difficulty = 75.0; break; case CraftResource.Bronze: difficulty = 80.0; break; case CraftResource.Gold: difficulty = 85.0; break; case CraftResource.Agapite: difficulty = 90.0; break; case CraftResource.Verite: difficulty = 95.0; break; case CraftResource.Valorite: difficulty = 99.0; break; } if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && !item.StoreBought) || (item is BaseWeapon && !item.StoreBought) || (item is BaseClothing && !item.StoreBought)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } /* Publish - September 22, 1999 * Items you wish to smelt must be in your back-pack. * Smelting will be tied to the mining skill. The higher your skill in mining, the more ingots you will get back. * The more wear and tear on an item, the less ingots it will return. * Items purchased from an NPC will yield only one ingot when smelted. * http://www.uoguide.com/Publish_-_September_22,_1999 */ if (Core.UOSP) { double amount = (double)ingot.Amount; // Smelting will be tied to the mining skill. The higher your skill in mining, the more ingots you will get back. amount = amount / 2 + ((amount / 2) * (from.Skills[SkillName.Mining].Value / 100)); // The more wear and tear on an item, the less ingots it will return. double MaxHitPoints = 0; double HitPoints = 0; if (item is BaseWeapon) { MaxHitPoints = (double)(item as BaseWeapon).MaxHitPoints; HitPoints = (double)(item as BaseWeapon).HitPoints; } else if (item is BaseArmor) { MaxHitPoints = (double)(item as BaseArmor).MaxHitPoints; HitPoints = (double)(item as BaseArmor).HitPoints; } // reduce the ingots by the amount of wear on the item. An item that is 50% worn out will reduce the ingots by 50% double difference = ((MaxHitPoints - HitPoints) / MaxHitPoints) * 100.0; if (difference > 0.0) { amount *= (100.0 - difference) / 100.0; } // okay, adjust ingot output ingot.Amount = (int)Math.Round(amount); if (ingot.Amount < 1) { ingot.Amount = 1; } } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch (Exception ex) { EventSink.InvokeLogException(new LogExceptionEventArgs(ex)); } return(SmeltResult.Success); }
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); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources[0]; if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } var oreEntry = ZhConfig.Resources.Ores.Entries[(int)resource - 1]; var difficulty = oreEntry.SmeltSkillRequired; if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is BaseArmor && ((BaseArmor)item).PlayerConstructed || item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed || item is BaseClothing && ((BaseClothing)item).PlayerConstructed) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2B); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
public override Item Construct(Type type, Mobile from) { if (type == typeof(TreasureMap)) { int level; //if ( from is PlayerMobile && ((PlayerMobile)from).Young && from.Map == Map.Trammel && TreasureMap.IsInHavenIsland( from ) ) // level = 0; //else level = 1; return(new TreasureMap(level, /*from.Map == Map.Felucca ?*/ Map.Felucca /* : Map.Trammel*/)); } else if (type == typeof(MessageInABottle)) { return(new MessageInABottle(/*from.Map == Map.Felucca ?*/ Map.Felucca /* : Map.Trammel*/)); } Container pack = from.Backpack; if (pack != null) { List <SOS> messages = pack.FindItemsByType <SOS>(); for (int i = 0; i < messages.Count; ++i) { SOS sos = messages[i]; if (from.Map == sos.TargetMap && from.InRange(sos.TargetLocation, 60)) { Item preLoot = null; switch (Utility.Random(8)) { case 0: // Body parts { int[] list = new int[] { 0x1CDD, 0x1CE5, // arm 0x1CE0, 0x1CE8, // torso 0x1CE1, 0x1CE9, // head 0x1CE2, 0x1CEC // leg }; preLoot = new ShipwreckedItem(Utility.RandomList(list)); break; } case 1: // Bone parts { int[] list = new int[] { 0x1AE0, 0x1AE1, 0x1AE2, 0x1AE3, 0x1AE4, // skulls 0x1B09, 0x1B0A, 0x1B0B, 0x1B0C, 0x1B0D, 0x1B0E, 0x1B0F, 0x1B10, // bone piles 0x1B15, 0x1B16 // pelvis bones }; preLoot = new ShipwreckedItem(Utility.RandomList(list)); break; } case 2: // Paintings and portraits { preLoot = new ShipwreckedItem(Utility.Random(0xE9F, 10)); break; } case 3: // Pillows { preLoot = new ShipwreckedItem(Utility.Random(0x13A4, 11)); break; } case 4: // Shells { preLoot = new ShipwreckedItem(Utility.Random(0xFC4, 9)); break; } case 5: //Hats { if (Utility.RandomBool()) { preLoot = new SkullCap(); } else { preLoot = new TricorneHat(); } break; } case 6: // Misc { int[] list = new int[] { 0x1EB5, // unfinished barrel 0xA2A, // stool 0xC1F, // broken clock 0x1047, 0x1048, // globe 0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves }; if (Utility.Random(list.Length + 1) == 0) { preLoot = new Candelabra(); } else { preLoot = new ShipwreckedItem(Utility.RandomList(list)); } break; } } if (preLoot != null) { if (preLoot is IShipwreckedItem) { ((IShipwreckedItem)preLoot).IsShipwreckedItem = true; } return(preLoot); } LockableContainer chest = null; switch (Utility.Random(3)) { case 0: chest = new MetalGoldenChest(); break; case 1: chest = new MetalChest(); break; default: case 2: chest = new WoodenChest(); break; } if (sos.IsAncient) { int hue = 1150; if (0.20 > Utility.RandomDouble()) { switch (Utility.Random((chest is WoodenChest) ? 6 : 14)) { case 0: hue = 1193; break; case 1: hue = 1281; break; case 2: hue = 1190; break; case 3: hue = 1165; break; case 4: hue = 1160; break; case 5: hue = 1126; break; case 6: hue = CraftResources.GetInfo(CraftResource.Valorite).Hue; break; case 7: hue = CraftResources.GetInfo(CraftResource.Verite).Hue; break; case 8: hue = CraftResources.GetInfo(CraftResource.Agapite).Hue; break; case 9: hue = CraftResources.GetInfo(CraftResource.Gold).Hue; break; case 10: hue = CraftResources.GetInfo(CraftResource.Bronze).Hue; break; case 11: hue = CraftResources.GetInfo(CraftResource.Copper).Hue; break; case 12: hue = CraftResources.GetInfo(CraftResource.ShadowIron).Hue; break; case 13: hue = CraftResources.GetInfo(CraftResource.DullCopper).Hue; break; } } chest.Hue = hue; } else if ((chest is MetalChest || chest is MetalGoldenChest) && (0.5 * sos.Level) >= Utility.RandomDouble()) { int randhue = Utility.Random(120); CraftResource resource = CraftResource.None; if (randhue >= 118) { resource = CraftResource.Valorite; } else if (randhue >= 115) { resource = CraftResource.Verite; } else if (randhue >= 110) { resource = CraftResource.Agapite; } else if (randhue >= 100) { resource = CraftResource.Gold; } else if (randhue >= 90) { resource = CraftResource.Bronze; } else if (randhue >= 70) { resource = CraftResource.Copper; } else if (randhue >= 40) { resource = CraftResource.ShadowIron; } else { resource = CraftResource.DullCopper; } chest.Hue = CraftResources.GetInfo(resource).Hue; } int soslevel = Math.Max(1, Math.Max(4, sos.Level)); TreasureMapChest.Fill(chest, soslevel); if (sos.IsAncient) { chest.DropItem(new FabledFishingNet()); } else { chest.DropItem(new SpecialFishingNet()); } chest.Movable = true; chest.Locked = false; chest.Name = "treasure chest"; chest.IsShipwreckedItem = true; if (sos.Level > 0) { chest.TrapType = TrapType.ExplosionTrap; chest.TrapPower = soslevel * Utility.RandomMinMax(5, 15); chest.TrapLevel = 0; } else { chest.TrapType = TrapType.None; chest.TrapPower = 0; chest.TrapLevel = 0; } sos.Delete(); return(chest); } } } return(base.Construct(type, from)); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } double difficulty = resource switch { CraftResource.Iron => 60, CraftResource.Gold => 60, CraftResource.Spike => 60, CraftResource.Fruity => 60, CraftResource.Bronze => 60, CraftResource.IceRock => 60, CraftResource.BlackDwarf => 60, CraftResource.DullCopper => 60, CraftResource.Platinum => 60, CraftResource.SilverRock => 60, CraftResource.DarkPagan => 60, CraftResource.Copper => 60, CraftResource.Mystic => 60, CraftResource.Spectral => 60, CraftResource.OldBritain => 60, CraftResource.Onyx => 60, CraftResource.RedElven => 60, CraftResource.Undead => 60, CraftResource.Pyrite => 60, CraftResource.Virginity => 60, CraftResource.Malachite => 60, CraftResource.Lavarock => 60, CraftResource.Azurite => 60, CraftResource.Dripstone => 60, CraftResource.Executor => 60, CraftResource.Peachblue => 60, CraftResource.Destruction => 60, CraftResource.Anra => 60, CraftResource.Crystal => 60, CraftResource.Doom => 60, CraftResource.Goddess => 60, CraftResource.NewZulu => 60, CraftResource.DarkSableRuby => 60, CraftResource.EbonTwilightSapphire => 60, CraftResource.RadiantNimbusDiamond => 60, _ => 0.0 }; if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is BaseArmor && ((BaseArmor)item).PlayerConstructed || item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed || item is BaseClothing && ((BaseClothing)item).PlayerConstructed) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
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); }
/* End Captcha Mod */ public virtual void FinishHarvesting(Mobile from, Item tool, HarvestDefinition def, object toHarvest, object locked) { from.EndAction(locked); if (!this.CheckHarvest(from, tool)) { return; } int tileID; Map map; Point3D loc; if (!this.GetHarvestDetails(from, tool, toHarvest, out tileID, out map, out loc)) { this.OnBadHarvestTarget(from, tool, toHarvest); return; } else if (!def.Validate(tileID)) { this.OnBadHarvestTarget(from, tool, toHarvest); return; } if (!this.CheckRange(from, tool, def, map, loc, true)) { return; } else if (!this.CheckResources(from, tool, def, map, loc, true)) { return; } else if (!this.CheckHarvest(from, tool, def, toHarvest)) { return; } if (this.SpecialHarvest(from, tool, def, map, loc)) { return; } HarvestBank bank = def.GetBank(map, loc.X, loc.Y); if (bank == null) { return; } HarvestVein vein = bank.Vein; if (vein != null) { vein = this.MutateVein(from, tool, def, bank, toHarvest, vein); } if (vein == null) { return; } HarvestResource primary = vein.PrimaryResource; HarvestResource fallback = vein.FallbackResource; HarvestResource resource = this.MutateResource(from, tool, def, map, loc, vein, primary, fallback); double skillBase = from.Skills[def.Skill].Base; double skillValue = from.Skills[def.Skill].Value; Type type = null; //daat99 OWLTR start - daat99 harvesting type = GetResourceType(from, tool, def, map, loc, resource); bool daatHarvesting = false; if (daat99.OWLTROptionsManager.IsEnabled(daat99.OWLTROptionsManager.OPTIONS_ENUM.DAAT99_MINING) && (type.IsSubclassOf(typeof(BaseOre)) || type.IsSubclassOf(typeof(BaseGranite)))) { daatHarvesting = true; } else if (daat99.OWLTROptionsManager.IsEnabled(daat99.OWLTROptionsManager.OPTIONS_ENUM.DAAT99_LUMBERJACKING) && type.IsSubclassOf(typeof(BaseLog))) { daatHarvesting = true; } if (daatHarvesting || (skillBase >= resource.ReqSkill && from.CheckSkill(def.Skill, resource.MinSkill, resource.MaxSkill))) { if (type != null) //añadido 18/03/2018 { type = GetResourceType(from, tool, def, map, loc, resource); } if (type != null) { type = MutateType(type, from, tool, def, map, loc, resource); } if (daatHarvesting) { type = ResourceHelper.GetDaat99HarvestedType(type, bank.Vein.IsProspected, skillValue); from.CheckSkill(def.Skill, 0.0, from.Skills[def.Skill].Cap + (vein.IsProspected?10.0:0.0)); } //daat99 OWLTR end - daat99 harvesting if (type != null) { Item item = this.Construct(type, from); if (item == null) { type = null; } else { //The whole harvest system is kludgy and I'm sure this is just adding to it. if (item.Stackable) { int amount = def.ConsumedPerHarvest; int feluccaAmount = def.ConsumedPerFeluccaHarvest; int racialAmount = (int)Math.Ceiling(amount * 1.1); int feluccaRacialAmount = (int)Math.Ceiling(feluccaAmount * 1.1); bool eligableForRacialBonus = (def.RaceBonus && from.Race == Race.Human); bool inFelucca = (map == Map.Felucca); if (eligableForRacialBonus && inFelucca && bank.Current >= feluccaRacialAmount && 0.1 > Utility.RandomDouble()) { item.Amount = feluccaRacialAmount; } else if (inFelucca && bank.Current >= feluccaAmount) { item.Amount = feluccaAmount; } else if (eligableForRacialBonus && bank.Current >= racialAmount && 0.1 > Utility.RandomDouble()) { item.Amount = racialAmount; } else { item.Amount = amount; } } bank.Consume(item.Amount, from); //daat99 OWLTR start - custom harvesting CraftResource craftResourceFromType = CraftResources.GetFromType(type); string s_Type = "UNKNOWN"; int i_Tokens = 1; if (craftResourceFromType != CraftResource.None) { s_Type = CraftResources.GetInfo(craftResourceFromType).Name; i_Tokens = CraftResources.GetIndex(craftResourceFromType) + 1; } if (craftResourceFromType != CraftResource.None && daat99.OWLTROptionsManager.IsEnabled(daat99.OWLTROptionsManager.OPTIONS_ENUM.DAAT99_MINING) && def.Skill == SkillName.Mining && (type.IsSubclassOf(typeof(Server.Items.BaseOre)) || type.IsSubclassOf(typeof(Server.Items.BaseGranite)))) { if (type.IsSubclassOf(typeof(Server.Items.BaseOre))) { if (Give(from, item, def.PlaceAtFeetIfFull)) { from.SendMessage("You dig some {0} ore and placed it in your backpack.", s_Type); } else { from.SendMessage("Your backpack is full, so the ore you mined is lost."); item.Delete(); } } else { if (Give(from, item, def.PlaceAtFeetIfFull)) { from.SendMessage("You carefully extract some workable stone from the ore vein."); } else { from.SendMessage("Your backpack is full, so the ore you mined is lost."); item.Delete(); } } } else if (craftResourceFromType != CraftResource.None && OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.DAAT99_LUMBERJACKING) && def.Skill == SkillName.Lumberjacking) { if (Give(from, item, def.PlaceAtFeetIfFull)) { from.SendMessage("You placed some {0} logs in your backpack.", s_Type); } else { from.SendMessage("You can't place any wood into your backpack!"); item.Delete(); } } else { //daat99 OWLTR end - custom harvesting if (Give(from, item, def.PlaceAtFeetIfFull)) { SendSuccessTo(from, item, resource); } else { SendPackFullTo(from, item, def, resource); item.Delete(); } //daat99 OWLTR start - custom harvesting } if (from.Map == Map.Felucca) { i_Tokens = (int)(i_Tokens * 1.5); } if (OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.HARVEST_GIVE_TOKENS)) { TokenSystem.GiveTokensToPlayer(from as Server.Mobiles.PlayerMobile, i_Tokens); } //daat99 OWLTR end - custom harvesting BonusHarvestResource bonus = def.GetBonusResource(); if (bonus != null && bonus.Type != null && skillBase >= bonus.ReqSkill) { Item bonusItem = this.Construct(bonus.Type, from); if (this.Give(from, bonusItem, true)) //Bonuses always allow placing at feet, even if pack is full irregrdless of def { bonus.SendSuccessTo(from); } else { item.Delete(); } } if (tool is IUsesRemaining) { IUsesRemaining toolWithUses = (IUsesRemaining)tool; toolWithUses.ShowUsesRemaining = true; if (toolWithUses.UsesRemaining > 0) { --toolWithUses.UsesRemaining; } if (toolWithUses.UsesRemaining < 1) { tool.Delete(); def.SendMessageTo(from, def.ToolBrokeMessage); } } } } } }
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); } 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.MaxHits; 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)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); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (Ethic.IsImbued(item)) { return(SmeltResult.Invalid); } if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } var difficulty = resource switch { CraftResource.DullCopper => 65.0, CraftResource.ShadowIron => 70.0, CraftResource.Copper => 75.0, CraftResource.Bronze => 80.0, CraftResource.Gold => 85.0, CraftResource.Agapite => 90.0, CraftResource.Verite => 95.0, CraftResource.Valorite => 99.0, _ => 0.0 }; if (difficulty > from.Skills.Mining.Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)ActivatorUtil.CreateInstance(resourceType); if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed || item is BaseWeapon weapon && weapon.PlayerConstructed || item is BaseClothing clothing && clothing.PlayerConstructed) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); }
private SmeltResult Resmelt(Mobile from, Item item, CraftResource resource) { try { if (Ethics.Ethic.IsImbued(item)) { return(SmeltResult.Invalid); } if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(SmeltResult.Invalid); } CraftResourceInfo info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(SmeltResult.Invalid); } CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(SmeltResult.Invalid); } CraftRes craftResource = craftItem.Resources.GetAt(0); if (craftResource.Amount < 2) { return(SmeltResult.Invalid); // Not enough metal to resmelt } double difficulty = 0.0; switch (resource) { case CraftResource.DullCopper: difficulty = 65.0; break; case CraftResource.ShadowIron: difficulty = 70.0; break; case CraftResource.Copper: difficulty = 75.0; break; case CraftResource.Bronze: difficulty = 80.0; break; case CraftResource.Gold: difficulty = 85.0; break; case CraftResource.Agapite: difficulty = 90.0; break; case CraftResource.Verite: difficulty = 95.0; break; case CraftResource.Valorite: difficulty = 99.0; break; } if (difficulty > from.Skills[SkillName.Mining].Value) { return(SmeltResult.NoSkill); } Type resourceType = info.ResourceTypes[0]; Item ingot = (Item)Activator.CreateInstance(resourceType); if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed)) { ingot.Amount = craftResource.Amount / 2; } else { ingot.Amount = 1; } item.Delete(); from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(SmeltResult.Success); } catch { } return(SmeltResult.Invalid); }
private bool Resmelt(Mobile from, Item item, CraftResource resource) { try { if (CraftResources.GetType(resource) != CraftResourceType.Metal) { return(false); } var info = CraftResources.GetInfo(resource); if (info == null || info.ResourceTypes.Length == 0) { return(false); } var craftItem = DefBlacksmithy.CraftSystem.CraftItems.SearchFor(item.GetType()); if (craftItem == null || craftItem.Resources.Count == 0) { return(false); } var craftResource = craftItem.Resources[0]; if (craftResource.Amount < 2) { return(false); // Not enough metal to resmelt } var difficulty = resource switch { CraftResource.DullCopper => 65.0, CraftResource.ShadowIron => 70.0, CraftResource.Copper => 75.0, CraftResource.Bronze => 80.0, CraftResource.Gold => 85.0, CraftResource.Agapite => 90.0, CraftResource.Verite => 95.0, CraftResource.Valorite => 99.0, _ => 0.0 }; var ingot = info.ResourceTypes[0].CreateInstance <Item>(); if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed || item is BaseWeapon weapon && weapon.PlayerConstructed || item is BaseClothing clothing && clothing.PlayerConstructed) { var mining = from.Skills.Mining.Value; if (mining > 100.0) { mining = 100.0; } var amount = ((4 + mining) * craftResource.Amount - 4) * 0.0068; if (amount < 2) { ingot.Amount = 2; } else { ingot.Amount = (int)amount; } } else { ingot.Amount = 2; } if (difficulty > from.Skills.Mining.Value) { m_Failure = true; ingot.Delete(); } else { item.Delete(); } from.AddToBackpack(ingot); from.PlaySound(0x2A); from.PlaySound(0x240); return(true); }