Пример #1
0
            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);
                }
Пример #2
0
        public override void InitCraftList()
        {
            int index = -1;

            #region Armure d'Os
            index = AddCraft(typeof(BoneHelm), "Armure d'Os", "Casque d'Os", 40.0, 70.0, typeof(Bone), "Os", 4, 1044463);
            AddRes(index, typeof(Leather), "Cuir", 2, 1044463);
            index = AddCraft(typeof(BoneGloves), "Armure d'Os", "Gants d'Os", 40.0, 70.0, typeof(Bone), "Os", 6, 1044463);
            AddRes(index, typeof(Leather), "Cuir", 3, 1044463);
            index = AddCraft(typeof(BoneArms), "Armure d'Os", "Brassards d'Os", 40.0, 70.0, typeof(Bone), "Os", 8, 1044463);
            AddRes(index, typeof(Leather), "Cuir", 4, 1044463);
            index = AddCraft(typeof(BoneLegs), "Armure d'Os", "Jambieres d'Os", 40.0, 70.0, typeof(Bone), "Os", 10, 1044463);
            AddRes(index, typeof(Leather), "Cuir", 5, 1044463);
            index = AddCraft(typeof(BoneChest), "Armure d'Os", "Plastron d'Os", 40.0, 70.0, typeof(Bone), "Os", 12, 1044463);
            AddRes(index, typeof(Leather), "Cuir", 6, 1044463);
            #endregion

            #region Armure de Cuir
            index = AddCraft(typeof(LeatherGorget), "Armure de Cuir", "Gorget de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(LeatherCap), "Armure de Cuir", "Casque de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 2, 1044463, true);
            index = AddCraft(typeof(LeatherGloves), "Armure de Cuir", "Gants de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 3, 1044463, true);
            index = AddCraft(typeof(LeatherArms), "Armure de Cuir", "Brassards de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(LeatherLegs), "Armure de Cuir", "Jambières de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(LeatherChest), "Armure de Cuir", "Plastron de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(LeatherShorts), "Armure de Cuir", "Jupe de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(LeatherSkirt), "Armure de Cuir", "Jupette de Cuir", 30.0, 50.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(LeatherBustierArms), "Armure de Cuir", "Brassards Féminins", 30.0, 50.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(FemaleLeatherChest), "Armure de Cuir", "Cuirasse Féminine", 30.0, 50.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(LeatherBarbareLeggings), "Armure de Cuir", "Jambière de Cuir Barbare", 35.0, 55.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(LeatherBarbareTunic), "Armure de Cuir", "Plastron de Cuir Barbare", 35.0, 55.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(RoublardLeggings), "Armure de Cuir", "Jambières Roublardes", 35.0, 55.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(RoublardTunic), "Armure de Cuir", "Plastron Roublard", 35.0, 55.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(ElfiqueCuirTunic), "Armure de Cuir", "Plastron de Cuir Elfique", 40.0, 60.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(ElfiqueCuirRobe), "Armure de Cuir", "Vetement de Cuir Elfique", 40.0, 60.0, typeof(Leather), "Cuir", 14, 1044463, true);

            #endregion

            #region Armure de Cuir Clouté
            index = AddCraft(typeof(StuddedGorget), "Armure de Cuir Clouté", "Gorget de Cuir Clouté", 35.0, 55.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(StuddedGloves), "Armure de Cuir Clouté", "Gants de Cuir Clouté", 35.0, 55.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(StuddedArms), "Armure de Cuir Clouté", "Brassards de Cuir Clouté", 35.0, 55.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(StuddedLegs), "Armure de Cuir Clouté", "Jambières de Cuir Clouté", 35.0, 55.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(StuddedChest), "Armure de Cuir Clouté", "Plastron de Cuir Clouté", 35.0, 55.0, typeof(Leather), "Cuir", 14, 1044463, true);
            index = AddCraft(typeof(StuddedBustierArms), "Armure de Cuir Clouté", "Brassards Féminins", 35.0, 55.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(FemaleStuddedChest), "Armure de Cuir Clouté", "Cuirasse Féminine", 35.0, 55.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(ElfeHelm), "Armure de Cuir Clouté", "Casque de Feuilles", 40.0, 60.0, typeof(Leather), "Cuir", 3, 1044463, true);
            AddRes(index, typeof(Log), "Bûche", 2, 1044351);
            index = AddCraft(typeof(ElfeGorget), "Armure de Cuir Clouté", "Gorget de Feuilles", 40.0, 60.0, typeof(Leather), "Cuir", 3, 1044463, true);
            AddRes(index, typeof(Log), "Bûche", 2, 1044351);
            index = AddCraft(typeof(ElfeArms), "Armure de Cuir Clouté", "Brassards de Feuilles", 40.0, 60.0, typeof(Leather), "Cuir", 3, 1044463, true);
            AddRes(index, typeof(Log), "Bûche", 2, 1044351);
            index = AddCraft(typeof(ElfeLeggings), "Armure de Cuir Clouté", "Jambières de Feuilles", 40.0, 60.0, typeof(Leather), "Cuir", 3, 1044463, true);
            AddRes(index, typeof(Log), "Bûche", 2, 1044351);
            index = AddCraft(typeof(ElfeTunic), "Armure de Cuir Clouté", "Tunique de Feuilles", 40.0, 60.0, typeof(Leather), "Cuir", 3, 1044463, true);
            AddRes(index, typeof(Log), "Bûche", 2, 1044351);
            index = AddCraft(typeof(StuddedBarbareGreaves), "Armure de Cuir Clouté", "Brassards Clouté Barbare", 45.0, 65.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(StuddedBarbareGorget), "Armure de Cuir Clouté", "Gorget Clouté Barbare", 45.0, 65.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(StuddedBarbareLeggings), "Armure de Cuir Clouté", "Jambières Clouté Barbare", 45.0, 65.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(StuddedBarbareTunic), "Armure de Cuir Clouté", "Tunique Clouté Barbare", 45.0, 65.0, typeof(Leather), "Cuir", 14, 1044463, true);
            #endregion

            #region Chaussures
            index = AddCraft(typeof(Sandals), "Chaussures & Bottes", "Sandales", 10.0, 20.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(Geta), "Chaussures & Bottes", "Geta", 20.0, 30.0, typeof(Leather), "Cuir", 5, 1044463, true);

            index = AddCraft(typeof(Shoes), "Chaussures & Bottes", "Souliers", 30.0, 50.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(SouliersFourrure), "Chaussures & Bottes", "Souliers Fourrure", 40.0, 60.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(SouliersBoucles), "Chaussures & Bottes", "Souliers Bouclés", 50.0, 70.0, typeof(Leather), "Cuir", 7, 1044463, true);

            index = AddCraft(typeof(BottesPetites), "Chaussures & Bottes", "Petites Bottes", 30.0, 50.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(Boots), "Chaussures & Bottes", "Bottes", 40.0, 60.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(ThighBoots), "Chaussures & Bottes", "Bottes Longues", 50.0, 70.0, typeof(Leather), "Cuir", 14, 1044463, true);
            index = AddCraft(typeof(BottesBoucles), "Chaussures & Bottes", "Bottes Bouclés", 60.0, 80.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(Bottes), "Chaussures & Bottes", "Bottes Simples", 60.0, 80.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(BottesVoyage), "Chaussures & Bottes", "Bottes de Voyage", 60.0, 80.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(BottesLourdes), "Chaussures & Bottes", "Bottes Lourdes", 70.0, 90.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(BottesNoble), "Chaussures & Bottes", "Bottes Nobles", 70.0, 90.0, typeof(Leather), "Cuir", 12, 1044463, true);
            index = AddCraft(typeof(BottesFourrure), "Chaussures & Bottes", "Bottes Fourrure", 80.0, 100.0, typeof(Leather), "Cuir", 10, 1044463, true);
            index = AddCraft(typeof(BottesSombres), "Chaussures & Bottes", "Bottes Sombres", 90.0, 120.0, typeof(Leather), "Cuir", 16, 1044463, true);
            #endregion

            index = AddCraft(typeof(CeinturePauvre), "Accessoires", "Ceinture Pauvre", 0.0, 20.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(Bourse), "Accessoires", "Bourse", 10.0, 30.0, typeof(Leather), "Cuir", 2, 1044463, true);
            index = AddCraft(typeof(Ceinture), "Accessoires", "Ceinture Simple", 20.0, 40.0, typeof(Leather), "Cuir", 3, 1044463, true);
            index = AddCraft(typeof(CeintureBourse), "Accessoires", "Ceinture Bourse", 20.0, 40.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(CeintureBoucle), "Accessoires", "Ceinture Bouclé", 30.0, 50.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(CeintureCuir), "Accessoires", "Ceinture de Cuir", 40.0, 70.0, typeof(Leather), "Cuir", 5, 1044463, true);
            index = AddCraft(typeof(CeinturePendante), "Accessoires", "Ceinture Pendante", 50.0, 80.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(CeintureNordique), "Accessoires", "Ceinture Nordique", 60.0, 90.0, typeof(Leather), "Cuir", 4, 1044463, true);
            index = AddCraft(typeof(CeintureLongue), "Accessoires", "Ceinture Longue", 70.0, 100.0, typeof(Leather), "Cuir", 8, 1044463, true);

            index = AddCraft(typeof(Carquois), "Accessoires", "Carquois", 30.0, 60.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(Fourreau), "Accessoires", "Fourreau", 30.0, 60.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(FourreauDos), "Accessoires", "Fourreau de Dos", 30.0, 60.0, typeof(Leather), "Cuir", 8, 1044463, true);
            index = AddCraft(typeof(FourreauDague), "Accessoires", "Fourreau à Dague", 40.0, 70.0, typeof(Leather), "Cuir", 5, 1044463, true);
            index = AddCraft(typeof(FourreauDecouvert), "Accessoires", "Fourreau à Découvert", 50.0, 80.0, typeof(Leather), "Cuir", 5, 1044463, true);
            index = AddCraft(typeof(FourreauRapiere), "Accessoires", "Fourreau d'Estoc", 60.0, 90.0, typeof(Leather), "Cuir", 5, 1044463, true);
            index = AddCraft(typeof(FourreauEpee), "Accessoires", "Fourreau à Épées", 60.0, 90.0, typeof(Leather), "Cuir", 5, 1044463, true);
            index = AddCraft(typeof(FourreauSabre), "Accessoires", "Fourreau à Sabres", 70.0, 100.0, typeof(Leather), "Cuir", 5, 1044463, true);

            index = AddCraft(typeof(SacocheCeinture), "Accessoires", "Ceinture Double", 30.0, 50.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(SacocheHerboriste), "Accessoires", "Sacoche d'Herboriste", 40.0, 60.0, typeof(Leather), "Cuir", 5, 1044463, true);
            index = AddCraft(typeof(SacocheRoublard), "Accessoires", "Sacoche de Roublard", 50.0, 70.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(SacocheAventure), "Accessoires", "Sacoche d'Aventurier", 60.0, 80.0, typeof(Leather), "Cuir", 6, 1044463, true);

            index = AddCraft(typeof(Pardessus), "Accessoires", "Pardessus", 20.0, 40.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(PardessusBarbare), "Accessoires", "Pardessus Barbare", 40.0, 60.0, typeof(Leather), "Cuir", 6, 1044463, true);
            index = AddCraft(typeof(EpauliereBarbare), "Accessoires", "Épaulière Barbare", 60.0, 80.0, typeof(Leather), "Cuir", 8, 1044463, true);

            index = AddCraft(typeof(FouetCuir), "Accessoires", "Fouet en cuir", 80, 100, typeof(Leather), "Cuir", 6, 1044463, true);

            // Set the overridable material
            SetSubRes(typeof(Bone), "Os");

            // Add every material you want the player to be able to choose from
            // This will override the overridable material
            AddSubRes(typeof(Bone), "Os", CraftResources.GetSkill(CraftResource.RegularBones), 1049311);
            AddSubRes(typeof(GobelinBone), "Os Gobelin", CraftResources.GetSkill(CraftResource.GobelinBones), 1049311);
            AddSubRes(typeof(ReptilienBone), "Os Reptilien", CraftResources.GetSkill(CraftResource.ReptilienBones), 1049311);
            AddSubRes(typeof(NordiqueBone), "Os Nordique", CraftResources.GetSkill(CraftResource.NordiqueBones), 1049311);
            AddSubRes(typeof(DesertiqueBone), "Os Désertique", CraftResources.GetSkill(CraftResource.DesertiqueBones), 1049311);
            AddSubRes(typeof(MaritimeBone), "Os Maritime", CraftResources.GetSkill(CraftResource.MaritimeBones), 1049311);
            AddSubRes(typeof(VolcaniqueBone), "Os Volcanique", CraftResources.GetSkill(CraftResource.VolcaniqueBones), 1049311);
            AddSubRes(typeof(GeantBone), "Os Géant", CraftResources.GetSkill(CraftResource.GeantBones), 1049311);
            AddSubRes(typeof(MinotaureBone), "Os Minotaure", CraftResources.GetSkill(CraftResource.MinotaureBones), 1049311);
            AddSubRes(typeof(OphidienBone), "Os Ophidien", CraftResources.GetSkill(CraftResource.OphidienBones), 1049311);
            AddSubRes(typeof(ArachnideBone), "Os Arachnide", CraftResources.GetSkill(CraftResource.ArachnideBones), 1049311);
            AddSubRes(typeof(MagiqueBone), "Os Magique", CraftResources.GetSkill(CraftResource.MagiqueBones), 1049311);
            AddSubRes(typeof(AncienBone), "Os Ancien", CraftResources.GetSkill(CraftResource.AncienBones), 1049311);
            AddSubRes(typeof(DemonBone), "Os Demoniaque", CraftResources.GetSkill(CraftResource.DemonBones), 1049311);
            AddSubRes(typeof(DragonBone), "Os Dragonique", CraftResources.GetSkill(CraftResource.DragonBones), 1049311);

            // Set the overridable material 2
            SetSubRes2(typeof(Leather), "Cuir");

            // Add every material you want the player to be able to choose from
            // This will override the overridable material
            AddSubRes2(typeof(Leather), "Cuir", CraftResources.GetSkill(CraftResource.RegularLeather), 1049311);
            AddSubRes2(typeof(ReptilienLeather), "Cuir Reptilien", CraftResources.GetSkill(CraftResource.ReptilienLeather), 1049311);
            AddSubRes2(typeof(NordiqueLeather), "Cuir Nordique", CraftResources.GetSkill(CraftResource.NordiqueLeather), 1049311);
            AddSubRes2(typeof(DesertiqueLeather), "Cuir Désertique", CraftResources.GetSkill(CraftResource.DesertiqueLeather), 1049311);
            AddSubRes2(typeof(MaritimeLeather), "Cuir Maritime", CraftResources.GetSkill(CraftResource.MaritimeLeather), 1049311);
            AddSubRes2(typeof(VolcaniqueLeather), "Cuir Volcanique", CraftResources.GetSkill(CraftResource.VolcaniqueLeather), 1049311);
            AddSubRes2(typeof(GeantLeather), "Cuir Géant", CraftResources.GetSkill(CraftResource.GeantLeather), 1049311);
            AddSubRes2(typeof(MinotaureLeather), "Cuir Minotaure", CraftResources.GetSkill(CraftResource.MinotaurLeather), 1049311);
            AddSubRes2(typeof(OphidienLeather), "Cuir Ophidien", CraftResources.GetSkill(CraftResource.OphidienLeather), 1049311);
            AddSubRes2(typeof(ArachnideLeather), "Cuir Arachnide", CraftResources.GetSkill(CraftResource.ArachnideLeather), 1049311);
            AddSubRes2(typeof(MagiqueLeather), "Cuir Magique", CraftResources.GetSkill(CraftResource.MagiqueLeather), 1049311);
            AddSubRes2(typeof(AncienLeather), "Cuir Ancien", CraftResources.GetSkill(CraftResource.AncienLeather), 1049311);
            AddSubRes2(typeof(DemoniaqueLeather), "Cuir Demoniaque", CraftResources.GetSkill(CraftResource.DemoniaqueLeather), 1049311);
            AddSubRes2(typeof(DragoniqueLeather), "Cuir Dragonique", CraftResources.GetSkill(CraftResource.DragoniqueLeather), 1049311);
            AddSubRes2(typeof(LupusLeather), "Cuir Lupus", CraftResources.GetSkill(CraftResource.LupusLeather), 1049311);

            MarkOption = true;
            Repair     = Core.AOS;
            CanEnhance = Core.AOS;
        }
Пример #3
0
            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);
            }
Пример #4
0
        public void DisplayRewardPage()
        {
            AddPage(Page);
            double points = PointsSystem.VoidPool.GetPoints(User);

            int offset = 110;
            int next   = 0;
            int max    = GetMax(VoidPoolRewards.Rewards);

            while (offset + next < 300 && Index < VoidPoolRewards.Rewards.Count)
            {
                CollectionItem item = VoidPoolRewards.Rewards[Index];

                int height = Math.Max(item.Height, 20);

                if (points >= item.Points)
                {
                    this.AddButton(35, offset + (int)(height / 2) - 5, 0x837, 0x838, 200 + Index, GumpButtonType.Reply, 0);
                    this.AddTooltip(item.Tooltip);
                }

                int y = offset - item.Y;

                if (item.Height < 20)
                {
                    y += (20 - item.Height) / 2;
                }

                Item i = Owner.Backpack.FindItemByType(item.Type);
                int  hue;

                if (i != null)
                {
                    hue = points >= item.Points ? i.Hue : 0x3E9;
                }
                else
                {
                    hue = points >= item.Points ? CraftResources.GetHue((CraftResource)item.Hue) : 0x3E9;
                }

                AddItem(55 - item.X + max / 2 - item.Width / 2, y, item.ItemID, hue);

                if (i != null)
                {
                    AddItemProperty(i.Serial);
                }
                else
                {
                    AddTooltip(item.Tooltip);
                }

                AddLabel(65 + max, offset + (int)(height / 2) - 10, points >= item.Points ? 0x64 : 0x21, item.Points.ToString());

                offset += 5 + height;
                Index++;

                if (Index < VoidPoolRewards.Rewards.Count)
                {
                    next = Math.Max(VoidPoolRewards.Rewards[Index].Height, 20);
                }
                else
                {
                    next = 0;
                }
            }

            if (Page > 1)
            {
                AddButton(150, 335, 0x15E3, 0x15E7, 0, GumpButtonType.Page, Page - 1);
                AddHtmlLocalized(170, 335, 60, 20, 1074880, 0x1, false, false); // Previous
            }

            Page++;

            if (Index < VoidPoolRewards.Rewards.Count)
            {
                AddButton(300, 335, 0x15E1, 0x15E5, 0, GumpButtonType.Page, Page);
                AddHtmlLocalized(240, 335, 60, 20, 1072854, 0x1, false, false); // <div align=right>Next</div>
            }
        }
Пример #5
0
        public static EnhanceResult Invoke(Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage)
        {
            if (item == null)
            {
                return(EnhanceResult.BadItem);
            }

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

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

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

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

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

            int  quality           = 0;
            bool allRequiredSkills = false;

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

            CraftResourceInfo info = CraftResources.GetInfo(resource);

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

            CraftAttributeInfo attributes = info.AttributeInfo;

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

            int resHue = 0, maxAmount = 0;

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

            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);
        }
Пример #6
0
        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));
        }
Пример #7
0
        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;
            }
            }
        }
Пример #8
0
        public static string ComputeName(BaseClothing bc)
        {
            if (bc.IsRenamed && !string.IsNullOrEmpty(bc.Name))
            {
                return(bc.Name);
            }

            string name;

            if (bc.Name == null)
            {
                name = CliLoc.LocToString(bc.LabelNumber);
            }
            else
            {
                name = bc.Name;
            }

            if (bc.Amount > 1)
            {
                name = name + "s";
            }

            var resource = string.Empty;

            if (bc.Resource != CraftResource.None && bc.Resource != CraftResource.Iron)
            {
                resource = CraftResources.GetName(bc.Resource);
            }

            if (bc.Crafter != null)
            {
                if (bc.Quality == ClothingQuality.Exceptional)
                {
                    if (bc.Resource != CraftResource.None)
                    {
                        name = string.Format("{0} {1} {2} crafted by {3}", "Exceptional", resource.ToLower(), name.ToLower(), bc.Crafter.Name);
                    }
                    else
                    {
                        name = string.Format("{0} {1} crafted by {2}", "Exceptional", name.ToLower(), bc.Crafter.Name);
                    }
                }
                else if (bc.Resource != CraftResource.None)
                {
                    if (!string.IsNullOrEmpty(resource))
                    {
                        name = string.Format("{0} {1} crafted by {2}", resource, name.ToLower(), bc.Crafter.Name);
                    }
                    else
                    {
                        name = string.Format("{0} crafted by {1}", name, bc.Crafter.Name);
                    }
                }
                else
                {
                    name = string.Format("{0} crafted by {1}", name.ToLower(), bc.Crafter.Name);
                }
            }
            else if (bc.Resource != CraftResource.None)
            {
                if (bc.Quality == ClothingQuality.Exceptional)
                {
                    if (!string.IsNullOrEmpty(resource))
                    {
                        name = string.Format("{0} {1} {2}", "Exceptional", resource.ToLower(), name.ToLower());
                    }
                    else
                    {
                        name = string.Format(" {0} {1}", "Exceptional", name.ToLower());
                    }
                }
                else
                if (!string.IsNullOrEmpty(resource))
                {
                    name = string.Format("{0} {1}", resource, name.ToLower());
                }
                else
                {
                    name = string.Format(name);
                }
            }
            else if (bc.Resource == CraftResource.None)
            {
                if (bc.Quality == ClothingQuality.Exceptional)
                {
                    name = string.Format("{0} {1}", "Exceptional", name.ToLower());
                }
            }

            if (bc.Amount > 1)
            {
                name = bc.Amount + " " + name;
            }

            return(name);
        }
Пример #9
0
        public override int GetCraftSkillRequired(int itemSkillRequired, Type craftResourceType)
        {
            var resource = CraftResources.GetFromType(craftResourceType);

            return(itemSkillRequired + (int)(CraftResources.GetCraftSkillRequired(resource) / 3));
        }
Пример #10
0
        public static string ComputeName(BaseArmor ba)
        {
            if (ba.IsRenamed && !string.IsNullOrEmpty(ba.Name))
            {
                return(ba.Name);
            }

            string name;

            if (ba.Name == null)
            {
                name = CliLoc.LocToString(ba.LabelNumber);
            }
            else
            {
                name = ba.Name;
            }

            if (ba.Amount > 1)
            {
                name = name + "s";
            }

            var resource = string.Empty;

            if (ba.Resource != CraftResource.None && ba.Resource != CraftResource.Iron)
            {
                resource = CraftResources.GetName(ba.Resource);
            }

            if ((ba.ProtectionLevel != ArmorProtectionLevel.Regular))// && ba.Resource == CraftResource.Iron )
            //If the armor is magical
            {
                if (ba.Quality == ArmorQuality.Exceptional)
                {
                    name = string.Format("{0} {1} of {2}", "Exceptional", name.ToLower(), CliLoc.LocToString((1038005 + (int)ba.ProtectionLevel)).ToLower());
                }
                else
                {
                    name = string.Format("{0} of {1}", name, CliLoc.LocToString((1038005 + (int)ba.ProtectionLevel)).ToLower());
                }
            }
            else if (ba.Resource == CraftResource.None && ba.ProtectionLevel == ArmorProtectionLevel.Regular)
            //If the armor is not magical and not crafted
            {
                if (ba.Quality == ArmorQuality.Exceptional)
                {
                    name = string.Format("{0} {1}", "Exceptional", name);
                }
            }
            else if (ba.Resource != CraftResource.None)
            {
                //If it's crafted by a player
                if (ba.Crafter != null)
                {
                    if (ba.Quality == ArmorQuality.Exceptional)
                    {
                        if (ba.Resource != CraftResource.Iron)
                        {
                            name = string.Format("{0} {1} {2} crafted by {3}", "Exceptional", resource.ToLower(), name.ToLower(), ba.Crafter.Name);
                        }
                        else
                        {
                            name = string.Format("{0} {1} crafted by {2}", "Exceptional", name.ToLower(), ba.Crafter.Name);
                        }
                    }
                    else if (ba.Resource != CraftResource.Iron)
                    {
                        name = string.Format("{0} {1}", resource, name.ToLower());
                    }
                    else
                    {
                        name = string.Format("{0}", name);
                    }
                }
                else
                if (ba.Quality == ArmorQuality.Exceptional)
                {
                    if (!string.IsNullOrEmpty(resource))
                    {
                        name = string.Format("{0} {1} {2}", "Exceptional", resource.ToLower(), name.ToLower());
                    }
                    else
                    {
                        name = string.Format("{0} {1}", "Exceptional", name.ToLower());
                    }
                }
                else
                if (!string.IsNullOrEmpty(resource))
                {
                    name = string.Format("{0} {1}", resource, name.ToLower());
                }
                else
                {
                    name = string.Format(name);
                }
            }

            if (ba.Amount > 1)
            {
                name = ba.Amount + " " + name;
            }

            return(name);
        }
Пример #11
0
        public static string ComputeName(BaseWeapon bw)
        {
            if (bw.IsRenamed && !string.IsNullOrEmpty(bw.Name))
            {
                return(bw.Name);
            }

            string name;

            if (bw.Name == null)
            {
                name = CliLoc.LocToString(bw.LabelNumber);
            }
            else
            {
                name = bw.Name;
            }

            if (bw.Amount > 1)
            {
                name = name + "s";
            }

            var resource = string.Empty;

            if (bw.Slayer != SlayerName.None)
            {
                SlayerEntry entry = SlayerGroup.GetEntryByName(bw.Slayer);
                if (entry != null)
                {
                    string slayername = CliLoc.LocToString(entry.Title);
                    name = slayername + " " + name.ToLower();
                }
            }

            if (bw.Resource != CraftResource.None && bw.Resource != CraftResource.Iron)
            {
                resource = CraftResources.GetName(bw.Resource);
            }

            if ((bw.DamageLevel != WeaponDamageLevel.Regular || bw.AccuracyLevel != WeaponAccuracyLevel.Regular) && bw.Resource == CraftResource.Iron)
            {
                //If the weapon is accurate or magical
                if (bw.DamageLevel != WeaponDamageLevel.Regular && bw.AccuracyLevel != WeaponAccuracyLevel.Regular)
                {
                    name = string.Format("{0} {1} of {2}", ComputeAccuracyLevel(bw), name.ToLower(), CliLoc.LocToString((1038015 + (int)bw.DamageLevel)).ToLower());
                }
                else if (bw.AccuracyLevel != WeaponAccuracyLevel.Regular)
                {
                    name = string.Format("{0} {1}", ComputeAccuracyLevel(bw), name.ToLower());
                }
                else
                {
                    name = string.Format("{0} of {1}", name, CliLoc.LocToString((1038015 + (int)bw.DamageLevel)).ToLower());
                }

                if (bw.Quality == WeaponQuality.Exceptional)
                {
                    name = "Exceptional " + name.ToLower();
                }
            }
            else if (bw.Resource != CraftResource.None)
            {
                //If it's crafted by a player
                if (bw.Crafter != null)
                {
                    if (bw.Quality == WeaponQuality.Exceptional)
                    {
                        if (bw.Resource != CraftResource.Iron)
                        {
                            name = string.Format("{0} {1} {2} crafted by {3}", "Exceptional", resource.ToLower(), name.ToLower(), bw.Crafter.Name);
                        }
                        else
                        {
                            name = string.Format("{0} {1} crafted by {2}", "Exceptional", name.ToLower(), bw.Crafter.Name);
                        }
                    }
                    else if (bw.Resource != CraftResource.Iron)
                    {
                        if (!string.IsNullOrEmpty(resource))
                        {
                            name = string.Format("{0} {1} crafted by {2}", resource, name.ToLower(), bw.Crafter.Name);
                        }
                        else
                        {
                            name = string.Format("{0} crafted by {1}", name, bw.Crafter.Name);
                        }
                    }
                    else
                    {
                        name = string.Format("{0} crafted by {1}", name, bw.Crafter.Name);
                    }
                }
                else if (bw.Resource != CraftResource.Iron)
                {
                    if (bw.Quality == WeaponQuality.Exceptional)
                    {
                        if (!string.IsNullOrEmpty(resource))
                        {
                            name = string.Format("{0} {1} {2}", "Exceptional", resource.ToLower(), name.ToLower());
                        }
                        else
                        {
                            name = string.Format("{0}, {1}", "Exceptional", name.ToLower());
                        }
                    }
                    else if (!string.IsNullOrEmpty(resource))
                    {
                        name = string.Format("{0} {1}", resource, name.ToLower());
                    }
                    else
                    {
                        name = string.Format(name);
                    }
                }
                else if (bw.Resource == CraftResource.Iron)
                {
                    if (bw.Quality == WeaponQuality.Exceptional)
                    {
                        name = string.Format("{0} {1}", "Exceptional", name.ToLower());
                    }
                }
            }
            if (bw.Amount > 1)
            {
                name = bw.Amount + " " + name;
            }

            return(name);
        }
Пример #12
0
        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);
        }
Пример #13
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (targeted is BaseWeapon || targeted is BaseArmor || targeted is BaseJewel)
                {
                    if (from.CheckTargetSkill(SkillName.ArmsLore, targeted, 0, 100))
                    {
                        string texttype = "Inconnu", textquality = "Inconnue", textresource = "Inconnue", textdurability = "Inconnue";

                        if (targeted is BaseWeapon)
                        {
                            BaseWeapon arm = (BaseWeapon)targeted;

                            double durability = 0;

                            if (arm.MaxHitPoints != 0)
                            {
                                durability = arm.HitPoints / (double)arm.MaxHitPoints;
                            }

                            switch (arm.Type)
                            {
                            case WeaponType.Axe: texttype = "Hache"; break;

                            case WeaponType.Bashing: texttype = "Arme contondante"; break;

                            case WeaponType.Fists: texttype = "Arme de pugilat"; break;

                            case WeaponType.Piercing: texttype = "Arme d'estoc"; break;

                            case WeaponType.Polearm: texttype = "Arme à longue portée"; break;

                            case WeaponType.Ranged: texttype = "Arme de jet"; break;

                            case WeaponType.Slashing: texttype = "Arme à tranchant"; break;

                            case WeaponType.Staff: texttype = "Baton"; break;

                            default: texttype = "Arme"; break;
                            }

                            if (from.Skills[SkillName.ArmsLore].Value > 20)
                            {
                                if (arm.Quality == WeaponQuality.Low)
                                {
                                    textquality = "Mauvaise";
                                }
                                else if (arm.Quality == WeaponQuality.Exceptional)
                                {
                                    textquality = "Excellente";
                                }
                                else
                                {
                                    textquality = "Commune";
                                }
                            }

                            if (from.Skills[SkillName.Mining].Value > 30 && arm.Resource != CraftResource.None)
                            {
                                textresource = string.Format("{0}", CraftResources.GetName(arm.Resource));
                            }

                            if (from.Skills[SkillName.ArmsLore].Value >= 50 && from.Skills[SkillName.ArmsLore].Value <= 75)
                            {
                                if (durability < 0.1 || arm.MaxHitPoints < 10)
                                {
                                    textdurability = "Fissurée et menace de se briser!";
                                }
                                else if (durability < 0.3)
                                {
                                    textdurability = "Signes importants de faiblesse";
                                }
                                else if (durability < 0.6)
                                {
                                    textdurability = "Endommagée";
                                }
                                else if (durability < 0.85)
                                {
                                    textdurability = "Quelques dégats";
                                }
                                else if (durability < 1)
                                {
                                    textdurability = "Presque neuve";
                                }
                                else
                                {
                                    textdurability = "Aucun défaut";
                                }
                            }
                            else if (from.Skills[SkillName.ArmsLore].Value > 75 && from.Skills[SkillName.ArmsLore].Value <= 95)
                            {
                                textdurability = string.Format("Endommagée à {0}%", (100 - Math.Round(durability * 100.0)));
                            }
                            else if (from.Skills[SkillName.ArmsLore].Value > 95)
                            {
                                textdurability = string.Format("{0} sur {1}", arm.HitPoints, arm.MaxHitPoints);
                            }
                            else if (durability < 0.15)
                            {
                                textdurability = string.Format("Cette arme tombe en ruine");
                            }


                            from.SendMessage("Type : {0}", texttype);
                            from.SendMessage("Resource : {0}", textresource);
                            from.SendMessage("Qualité : {0}", textquality);
                            from.SendMessage("Durabilité : {0}", textdurability);/*, textquality, textresource, textdurability*/
                        }

                        else if (targeted is BaseArmor)
                        {
                            BaseArmor arm = (BaseArmor)targeted;

                            double durability = 0;

                            if (arm.MaxHitPoints != 0)
                            {
                                durability = arm.HitPoints / (double)arm.MaxHitPoints;
                            }

                            switch (arm.MaterialType)
                            {
                            case ArmorMaterialType.Barbed:
                            case ArmorMaterialType.Horned:
                            case ArmorMaterialType.Spined:
                            case ArmorMaterialType.Studded:
                            case ArmorMaterialType.Daemon: texttype = "Armure de cuir de demon"; break;

                            case ArmorMaterialType.Leather: texttype = "Armure de cuir"; break;

                            case ArmorMaterialType.Bone: texttype = "Armure d'os"; break;

                            case ArmorMaterialType.Chainmail: texttype = "Armure de chaine"; break;

                            case ArmorMaterialType.Cloth: texttype = "Armure de tissus"; break;

                            case ArmorMaterialType.Dragon: texttype = "Armure d'écaille"; break;

                            case ArmorMaterialType.Ringmail: texttype = "Armure d'anneau"; break;

                            case ArmorMaterialType.Plate: texttype = "Armure de plaque"; break;

                            default: texttype = "Armure"; break;
                            }

                            if (from.Skills[SkillName.ArmsLore].Value > 20)
                            {
                                if (arm.Quality == ArmorQuality.Low)
                                {
                                    textquality = "Mauvaise";
                                }
                                else if (arm.Quality == ArmorQuality.Exceptional)
                                {
                                    textquality = "Excellente";
                                }
                                else
                                {
                                    textquality = "Commune";
                                }
                            }

                            if (arm.MaterialType != ArmorMaterialType.Bone && from.Skills[SkillName.Mining].Value > 30 && arm.Resource != CraftResource.None)
                            {
                                textresource = string.Format(" en {0}.", CraftResources.GetName(arm.Resource));
                            }

                            if (from.Skills[SkillName.ArmsLore].Value >= 50 && from.Skills[SkillName.ArmsLore].Value <= 75)
                            {
                                if (durability < 0.1 || arm.MaxHitPoints < 10)
                                {
                                    textdurability = "Fissurée et menace de se briser!";
                                }
                                else if (durability < 0.3)
                                {
                                    textdurability = "Signes importants de faiblesse";
                                }
                                else if (durability < 0.6)
                                {
                                    textdurability = "Endommagée";
                                }
                                else if (durability < 0.85)
                                {
                                    textdurability = "Quelques dégats";
                                }
                                else if (durability < 1)
                                {
                                    textdurability = "Presque neuve";
                                }
                                else
                                {
                                    textdurability = "Aucun défaut";
                                }
                            }
                            else if (from.Skills[SkillName.ArmsLore].Value > 75 && from.Skills[SkillName.ArmsLore].Value <= 95)
                            {
                                textdurability = string.Format("Endommagée à {0}%", (100 - Math.Round(durability * 100.0)));
                            }
                            else if (from.Skills[SkillName.ArmsLore].Value > 95)
                            {
                                textdurability = string.Format("{0} sur {1}", arm.HitPoints, arm.MaxHitPoints);
                            }
                            else if (durability < 0.15)
                            {
                                textdurability = string.Format("Cette arme tombe en ruine");
                            }

                            from.SendMessage("Type : {0}", texttype);
                            from.SendMessage("Resource : {0}", textresource);
                            from.SendMessage("Qualité : {0}", textquality);
                            from.SendMessage("Durabilité : {0}", textdurability);
                        }
                        else if (targeted is BaseJewel)
                        {
                            BaseJewel arm = (BaseJewel)targeted;

                            switch (arm.Layer)
                            {
                            case Layer.Earrings: texttype = "Boucles d'oreilles"; break;

                            case Layer.Neck: texttype = "Pendentif"; break;

                            case Layer.Bracelet: texttype = "Bracelet"; break;

                            default: texttype = "Bijou"; break;
                            }

                            if (from.Skills[SkillName.Mining].Value > 30 && arm.Resource != CraftResource.None)
                            {
                                textresource = string.Format("{0}.", CraftResources.GetName(arm.Resource));
                            }

                            from.SendMessage("Type : {0}", texttype);
                            from.SendMessage("Resource : {0}", textresource);
                        }
                        else
                        {
                            from.SendMessage("Ceci n'est ni une arme, ni une armure, ni un bijou"); // This is neither weapon nor armor.
                        }
                    }
                    else
                    {
                        from.SendMessage("Vous êtes incertain..."); // You are not certain...
                    }
                }
                else
                {
                    from.SendMessage("Ceci n'est ni une arme, ni une armure, ni un bijou"); // This is neither weapon nor armor.
                }
            }
Пример #14
0
        public static EnhanceResult Invoke(Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage)
        {
            if (item == null)
            {
                return(EnhanceResult.BadItem);
            }

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

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

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

            CraftItem craftItem;

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

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

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

            bool exceptional       = false;
            bool allRequiredSkills = false;

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

            CraftResourceInfo info = CraftResources.GetInfo(resource);

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

            CraftAttributeInfo attributes = info.AttributeInfo;

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

            int resHue = 0, maxAmount = 0;

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

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

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

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

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

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

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

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

                baseChance = 20;

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

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

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

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

                baseChance = 20;

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

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

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

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

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

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

            EnhanceResult res = EnhanceResult.Success;

            PlayerMobile user = from as PlayerMobile;

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

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

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

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

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

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

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

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

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

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

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

                item.Delete();
                break;
            }

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

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

                    w.Resource = resource;

                    int hue = w.GetElementalDamageHue();

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

                break;
            }

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

                break;
            }
            }

            return(res);
        }
Пример #15
0
        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);
        }
Пример #16
0
        public BaseGlovesOfMining(int bonus, int itemID) : base(itemID)
        {
            m_Bonus = bonus;

            this.Hue = CraftResources.GetHue((CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite));
        }
Пример #17
0
/*
 *              public override void AlterSpellDamageFrom( Mobile from, ref int damage )
 *              {
 *                      damage = 0;
 *              }
 */
/*
 *              public override void AlterAbilityDamageFrom( Mobile from, ref int damage )
 *              {
 *                      AlterMeleeDamageFrom( from, ref damage );
 *              }
 */
        public override void OnGotMeleeAttack(Mobile attacker)
        {
            this.FixedParticles(0x376A, 20, 10, 0x2530, EffectLayer.Waist);
            PlaySound(0x2F4);

            int discordanceEffect = 0;

            if (attacker is PlayerMobile && SkillHandlers.Discordance.GetEffect(this, ref discordanceEffect))
            {
                attacker.SendAsciiMessage("The creature's magnetic field is weak.");
            }
            else if (attacker != null)
            {
                attacker.SendAsciiMessage("The creature's magnetic field repels your attack.");

                if (attacker.AccessLevel == AccessLevel.Player && attacker.InRange(this.Location, 2) && 0.15 > Utility.RandomDouble())
                {
                    List <Item> items = new List <Item>();

                    for (int i = 0; i < attacker.Items.Count; i++)
                    {
                        Item item = attacker.Items[i];

                        if (item.Movable && item.LootType != LootType.Blessed && item.LootType != LootType.Newbied && item.BlessedFor == null)
                        {
                            CraftResource resource = CraftResource.None;

                            if (item is BaseWeapon)
                            {
                                resource = ((BaseWeapon)item).Resource;
                            }
                            else if (item is BaseArmor)
                            {
                                resource = ((BaseArmor)item).Resource;
                            }
                            else if (item is BaseJewel)
                            {
                                resource = CraftResource.Iron;
                            }
                            else if (item is BaseClothing)
                            {
                                resource = ((BaseClothing)item).Resource;
                            }
                            else
                            {
                                continue;
                            }

                            if (CraftResources.GetType(resource) == CraftResourceType.Metal)
                            {
                                items.Add(item);
                            }
                        }
                    }

                    if (items.Count > 0)
                    {
                        Item todrop = items[Utility.Random(items.Count)];

                        if (todrop is IDurability)
                        {
                            IDurability dura = (IDurability)todrop;
                            if (dura.MaxHitPoints > 0)                               //It is not invulnerable
                            {
                                int maxpts = dura.MaxHitPoints / 10;
                                int points = Math.Min(maxpts, dura.HitPoints);

                                dura.HitPoints -= points;
                                if (dura.HitPoints == 0)
                                {
                                    dura.MaxHitPoints -= maxpts - points;
                                }

                                if (dura.MaxHitPoints <= 0)
                                {
                                    attacker.SendMessage("The creature's magnetic field destroyed your {0}.", todrop.GetDisplayName(attacker.NetState, false));
                                    todrop.Delete();
                                }
                                else
                                {
                                    attacker.SendMessage("The creature's magnetic field attracted your {0}, and damaged it in the process.", todrop.GetDisplayName(attacker.NetState, false));
                                    todrop.MoveToWorld(Location, Map);
                                }
                            }
                        }
                        else
                        {
                            attacker.SendMessage("The creature's magnetic field attracted your {0}.", todrop.GetDisplayName(attacker.NetState, false));
                            todrop.MoveToWorld(Location, Map);
                        }

                        this.FixedParticles(0, 10, 0, 0x2530, EffectLayer.Waist);
                    }
                }
            }

            base.OnGotMeleeAttack(attacker);
        }
Пример #18
0
        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;
            }
            }
        }
Пример #19
0
 public PileofInspectedVeriteIngots()
     : base(0x1BEA)
 {
     Hue = CraftResources.GetHue(CraftResource.Verite);
 }
Пример #20
0
            protected override void OnTarget(Mobile mob, object targeted)
            {
                if (targeted is BaseWeapon)
                {
                    BaseWeapon weapon = (BaseWeapon)targeted;

                    Type t = CraftResources.GetTypeFromCraftResource(weapon.Resource);

                    if (t != null)
                    {
                        Item i = mob.Backpack.FindItemByType(t);
                        if (i != null)
                        {
                            int RequiredResAmount = 1 + (weapon.MaxDurability - weapon.Durability) / 25;
                            if (i.Amount > RequiredResAmount)
                            {
                                if (0.5 > Utility.RandomDouble())
                                {
                                    weapon.MaxDurability = (int)(weapon.MaxDurability * 0.95);
                                }

                                weapon.Durability = weapon.MaxDurability;

                                i.Consume(RequiredResAmount);
                            }
                            else
                            {
                                mob.SendMessage("Vous ne possédez pas assez de ressources pour réparer l'arme.");
                            }
                        }
                    }
                }
                else if (targeted is BaseArmor)
                {
                    BaseArmor armor = (BaseArmor)targeted;

                    Type t = CraftResources.GetTypeFromCraftResource(armor.Resource);

                    if (t != null)
                    {
                        Item i = mob.Backpack.FindItemByType(t);
                        if (i != null)
                        {
                            int RequiredResAmount = 1 + (armor.MaxDurability - armor.Durability) / 25;
                            if (i.Amount > RequiredResAmount)
                            {
                                if (0.5 > Utility.RandomDouble())
                                {
                                    armor.MaxDurability = (int)(armor.MaxDurability * 0.85);
                                }

                                armor.Durability = armor.MaxDurability;

                                i.Consume(RequiredResAmount);
                            }
                            else
                            {
                                mob.SendMessage("Vous ne possédez pas assez de ressources pour réparer l'armure.");
                            }
                        }
                    }
                }
            }
Пример #21
0
        public static EnhanceResult Invoke(Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage)
        {
            if (item == null)
            {
                return(EnhanceResult.BadItem);
            }

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

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

            if (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);
        }
Пример #22
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 2:     // Reset from Resource System
                m_Resource = DefaultResource;
                reader.ReadString();
                break;

            case 1:
            {
                m_Resource = (CraftResource)reader.ReadInt();
                break;
            }

            case 0:
            {
                OreInfo info;

                switch (reader.ReadInt())
                {
                case 0:
                    info = OreInfo.Iron;
                    break;

                case 1:
                    info = OreInfo.DullCopper;
                    break;

                case 2:
                    info = OreInfo.ShadowIron;
                    break;

                case 3:
                    info = OreInfo.Copper;
                    break;

                case 4:
                    info = OreInfo.Bronze;
                    break;

                case 5:
                    info = OreInfo.Gold;
                    break;

                case 6:
                    info = OreInfo.Agapite;
                    break;

                case 7:
                    info = OreInfo.Verite;
                    break;

                case 8:
                    info = OreInfo.Valorite;
                    break;

                default:
                    info = null;
                    break;
                }

                m_Resource = CraftResources.GetFromOreInfo(info);
                break;
            }
            }
        }
Пример #23
0
        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);
        }
Пример #24
0
 public PileofInspectedGoldIngots()
     : base(0x1BEA)
 {
     Hue = CraftResources.GetHue(CraftResource.Gold);
 }
Пример #25
0
        public void CreateResList(bool opt, Mobile from)
        {
            CraftSubResCol res = (opt ? this.m_CraftSystem.CraftSubRes2 : this.m_CraftSystem.CraftSubRes);
            //daat99 OWLTR start - recipe craft
            bool b_RecipeCraft  = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.RECIPE_CRAFT),
                 b_Blacksmithy  = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.BLACKSMITH_RECIPES),
                 b_BowFletching = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.BOWFLETCH_RECIPES),
                 b_Carpentry    = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.CARPENTRY_RECIPES),
                 b_Masonry      = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.MASONRY_RECIPES),
                 b_Tailoring    = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.TAILORING_RECIPES),
                 b_Tinkering    = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.TINKERING_RECIPES);

            if (b_RecipeCraft)
            {
                NewDaat99Holder dh       = (NewDaat99Holder)daat99.Daat99OWLTR.TempHolders[m_From];
                int             i_Lenght = 0;
                for (int i = 0; i < res.Count; ++i)
                {
                    int index = i_Lenght % 10;

                    CraftSubRes subResource = res.GetAt(i);
                    if (!dh.Resources.Contains(CraftResources.GetFromType(subResource.ItemType)) || (!b_Blacksmithy && m_CraftSystem is DefBlacksmithy) ||
                        (!b_BowFletching && m_CraftSystem is DefBowFletching) || (!b_Carpentry && m_CraftSystem is DefCarpentry) ||
                        (!b_Masonry && m_CraftSystem is DefMasonry) || (!b_Tailoring && m_CraftSystem is DefTailoring) ||
                        (!b_Tinkering && m_CraftSystem is DefTinkering))
                    {
                        if (index == 0)
                        {
                            if (i > 0)
                            {
                                AddButton(485, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1);
                            }

                            AddPage((i / 10) + 1);

                            if (i > 0)
                            {
                                AddButton(455, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10);
                            }

                            CraftContext context = m_CraftSystem.GetContext(m_From);

                            AddButton(220, 260, 4005, 4007, GetButtonID(6, 4), GumpButtonType.Reply, 0);
                            AddHtmlLocalized(255, 263, 200, 18, (context == null || !context.DoNotColor) ? 1061591 : 1061590, LabelColor, false, false);
                        }

                        AddButton(220, 60 + (index * 20), 4005, 4007, GetButtonID(5, i), GumpButtonType.Reply, 0);

                        if (subResource.NameNumber > 0)
                        {
                            AddHtmlLocalized(255, 63 + (index * 20), 250, 18, subResource.NameNumber, LabelColor, false, false);
                        }
                        else
                        {
                            AddLabel(255, 60 + (index * 20), LabelHue, subResource.NameString);
                        }
                        i_Lenght++;
                    }
                }
            }
            else
            {
                //daat99 OWLTR end - recipe craft
                for (int i = 0; i < res.Count; ++i)
                {
                    int index = i % 10;

                    CraftSubRes subResource = res.GetAt(i);

                    if (index == 0)
                    {
                        if (i > 0)
                        {
                            this.AddButton(485, 290, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1);
                        }

                        this.AddPage((i / 10) + 1);

                        if (i > 0)
                        {
                            this.AddButton(455, 290, 4014, 4015, 0, GumpButtonType.Page, i / 10);
                        }

                        CraftContext context = this.m_CraftSystem.GetContext(this.m_From);

                        this.AddButton(220, 290, 4005, 4007, GetButtonID(6, 4), GumpButtonType.Reply, 0);
                        this.AddHtmlLocalized(255, 293, 200, 18, (context == null || !context.DoNotColor) ? 1061591 : 1061590, LabelColor, false, false);
                    }

                    int resourceCount = 0;

                    if (from.Backpack != null)
                    {
                        Item[] items = from.Backpack.FindItemsByType(subResource.ItemType, true);

                        for (int j = 0; j < items.Length; ++j)
                        {
                            resourceCount += items[j].Amount;
                        }
                        //daat99 OWLTR start - craft from storage
                        ulong storageCount = MasterStorageUtils.GetPlayersStorageItemCount(from as Mobiles.PlayerMobile, subResource.ItemType);
                        if (storageCount > 0)
                        {
                            if (storageCount < int.MaxValue && storageCount + (ulong)resourceCount < int.MaxValue)
                            {
                                resourceCount += (int)storageCount;
                            }
                            else
                            {
                                resourceCount = int.MaxValue;
                            }
                        }
                        //daat99 OWLTR end - craft from storage
                    }

                    this.AddButton(220, 70 + (index * 20), 4005, 4007, GetButtonID(5, i), GumpButtonType.Reply, 0);

                    if (subResource.NameNumber > 0)
                    {
                        this.AddHtmlLocalized(255, 73 + (index * 20), 250, 18, subResource.NameNumber, resourceCount.ToString(), LabelColor, false, false);
                    }
                    else
                    {
                        this.AddLabel(255, 70 + (index * 20), LabelHue, String.Format("{0} ({1})", subResource.NameString, resourceCount));
                    }
                }
            }
        }
Пример #26
0
        public override void OnHarvestFinished(Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested, Type type)
        {
            if (tool is GargoylesAxe && 0.1 < Utility.RandomDouble())
            {
                HarvestResource res = vein.PrimaryResource;

                Map map = from.Map;
                if (map == null)
                {
                    return;
                }
                BaseCreature spawned = null;

                int i_Level = 0;
                if (OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.DAAT99_LUMBERJACKING))
                {
                    i_Level = CraftResources.GetIndex(CraftResources.GetFromType(type)) + 301;
                }
                else if (res == resource)
                {
                    try
                    {
                        i_Level = Array.IndexOf(def.Veins, vein) + 301;
                    }
                    catch { }
                }
                //		if (i_Level > 300 && OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.HARVEST_GIVE_TOKENS))
                //			TokenSystem.GiveTokensToPlayer(from as PlayerMobile, (i_Level - 300)*10);
                if (i_Level > 301)
                {
                    spawned = new Elementals(i_Level);
                }
                else
                {
                    spawned = null;
                }

                try
                {
                    if (spawned != null)
                    {
                        int offset = Utility.Random(8) * 2;

                        for (int i = 0; i < m_Offsets.Length; i += 2)
                        {
                            int x = from.X + m_Offsets[(offset + i) % m_Offsets.Length];
                            int y = from.Y + m_Offsets[(offset + i + 1) % m_Offsets.Length];

                            if (map.CanSpawnMobile(x, y, from.Z))
                            {
                                spawned.MoveToWorld(new Point3D(x, y, from.Z), map);
                                spawned.Combatant = from;
                                return;
                            }
                            else
                            {
                                int z = map.GetAverageZ(x, y);

                                if (map.CanSpawnMobile(x, y, z))
                                {
                                    spawned.MoveToWorld(new Point3D(x, y, z), map);
                                    spawned.Combatant = from;
                                    return;
                                }
                            }
                        }
                        spawned.MoveToWorld(from.Location, from.Map);
                        spawned.Combatant = from;
                    }
                }
                catch
                {
                }
            }
        }
Пример #27
0
            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
                    }
                    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);
            }
Пример #28
0
        public static EnhanceResult Invoke(Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage)
        {
            if (item == null)
            {
                return(EnhanceResult.BadItem);
            }

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

            if (!(item is BaseArmor) && !(item is BaseWeapon) && !(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);
        }
Пример #29
0
 public override void OnSingleClick(Mobile from)
 {
     LabelTo(from, string.Format("{0} {1} granite{2}", Amount > 1 ? Amount.ToString() : "", CraftResources.GetName(m_Resource).ToLower(), Amount > 1 ? "s" : ""));
 }
Пример #30
0
        private static void GenerateTable(CraftSystem system)
        {
            var stw = new StreamWriter("web/" + system.MainSkill.ToString() + ".json");

            using (JsonWriter writer = new JsonTextWriter(stw))
            {
                writer.Formatting = Formatting.Indented;
                //writer.WritePropertyName("items");
                writer.WriteStartArray();
                foreach (CraftItem item in system.CraftItems)
                {
                    writer.WriteStartObject();
                    writer.WritePropertyName("Name");
                    if (item.NameNumber == 0)
                    {
                        writer.WriteValue(item.NameString);
                    }
                    else
                    {
                        writer.WriteValue(CliLoc.LocToString(item.NameNumber));
                    }

                    writer.WritePropertyName("hue");
                    writer.WriteValue(item.ItemHue);
                    writer.WritePropertyName("type");
                    writer.WriteValue(CraftItem.ItemIDOf(item.ItemType));
                    writer.WritePropertyName("skills");
                    writer.WriteStartArray();
                    foreach (CraftSkill skill in item.Skills)
                    {
                        writer.WriteStartObject();
                        writer.WritePropertyName("skill");
                        writer.WriteValue(skill.SkillToMake.ToString());
                        writer.WritePropertyName("minskill");
                        writer.WriteValue(skill.MinSkill);
                        writer.WritePropertyName("maxskill");
                        writer.WriteValue(skill.MaxSkill);
                        writer.WriteEndObject();
                    }
                    writer.WriteEndArray();
                    writer.WritePropertyName("resources");
                    writer.WriteStartArray();
                    foreach (CraftRes res in item.Resources)
                    {
                        writer.WriteStartObject();
                        writer.WritePropertyName("res");
                        if (res.NameNumber != 0)
                        {
                            writer.WriteValue(CliLoc.LocToString(res.NameNumber));
                        }
                        else if (res.NameString?.Length > 2)
                        {
                            writer.WriteValue(res.NameString);
                        }
                        else
                        {
                            if (CraftResources.GetFromType(res.ItemType) != CraftResource.None)
                            {
                                var resource = CraftResources.GetName(CraftResources.GetFromType(res.ItemType));
                                writer.WriteValue(resource);
                            }
                        }
                        writer.WritePropertyName("qty");
                        writer.WriteValue(res.Amount);
                        writer.WriteEndObject();
                    }
                    writer.WriteEndArray();

                    writer.WriteEndObject();
                }
                writer.WriteEndArray();
            }
        }