예제 #1
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)
                    {
                    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;
                    }

                    double skill = Math.Max(from.Skills[SkillName.Mining].Value, from.Skills[SkillName.Blacksmith].Value);

                    if (difficulty > skill)
                    {
                        return(SmeltResult.NoSkill);
                    }

                    Type resourceType = info.ResourceTypes[0];
                    Item ingot        = (Item)Activator.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 = (int)(craftResource.Amount * .66);
                    }
                    else
                    {
                        ingot.Amount = 1;
                    }

                    item.Delete();
                    from.AddToBackpack(ingot);

                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                    return(SmeltResult.Success);
                }
예제 #2
0
파일: Resmelt.cs 프로젝트: silky/ModernUO
            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);
                    }

                    var info = CraftResources.GetInfo(resource);

                    if (info == null || info.ResourceTypes.Length == 0)
                    {
                        return(SmeltResult.Invalid);
                    }

                    var craftItem = m_CraftSystem.CraftItems.SearchFor(item.GetType());

                    if (craftItem == null || craftItem.Resources.Count == 0)
                    {
                        return(SmeltResult.Invalid);
                    }

                    var craftResource = craftItem.Resources[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);
                    }

                    var resourceType = info.ResourceTypes[0];
                    var 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);
                }
예제 #3
0
        protected override void OnTarget(Mobile from, object targeted)
        {
            if (targeted is Item)
            {
                Item item = targeted as Item;

                if (tool.Type == RuneApplicationTool.ApplyType.Metal)
                {
                    if (item is BaseJewel)
                    {
                        BaseJewel jewel = item as BaseJewel;

                        if (!jewel.Attributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        if (CraftResources.GetType(jewel.Resource) == CraftResourceType.Metal ||
                            CraftResources.GetType(jewel.Resource) == CraftResourceType.Wood)
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }

                        else
                        {
                            from.SendMessage("This is for use on metal and wooden objects only.");
                        }
                    }

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

                        if (!weapon.Attributes.IsEmpty || !weapon.WeaponAttributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        if (CraftResources.GetType(weapon.Resource) == CraftResourceType.Metal ||
                            CraftResources.GetType(weapon.Resource) == CraftResourceType.Wood)
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }

                        else
                        {
                            from.SendMessage("This is for use on metal and wooden objects only.");
                        }
                    }

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

                        if (!weapon.Attributes.IsEmpty || !weapon.WeaponAttributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        if (CraftResources.GetType(weapon.Resource) == CraftResourceType.Metal ||
                            CraftResources.GetType(weapon.Resource) == CraftResourceType.Wood)
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }

                        else
                        {
                            from.SendMessage("This is for use on metal and wooden objects only.");
                        }
                    }

                    if (item is BaseArmor)
                    {
                        BaseArmor armor = item as BaseArmor;

                        if (!armor.Attributes.IsEmpty || !armor.ArmorAttributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        if (CraftResources.GetType(armor.Resource) == CraftResourceType.Metal ||
                            CraftResources.GetType(armor.Resource) == CraftResourceType.Wood)
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }

                        else
                        {
                            from.SendMessage("This is for use on metal and wooden objects only.");
                        }
                    }
                }

                if (tool.Type == RuneApplicationTool.ApplyType.Leather)
                {
                    if (item is BaseClothing)
                    {
                        BaseClothing cloth = item as BaseClothing;

                        if (!cloth.Attributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        if (CraftResources.GetType(cloth.Resource) == CraftResourceType.Leather)
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }

                        else
                        {
                            from.SendMessage("This is for use on leather objects only.");
                        } return;
                    }

                    if (item is BaseArmor)
                    {
                        BaseArmor armor = item as BaseArmor;

                        if (!armor.Attributes.IsEmpty || !armor.ArmorAttributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        if (CraftResources.GetType(armor.Resource) == CraftResourceType.Leather)
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }

                        else
                        {
                            from.SendMessage("This is for use on leather objects only.");
                        }
                    }

                    if (item is Spellbook)
                    {
                        if (!((Spellbook)item).Attributes.IsEmpty)
                        {
                            from.SendMessage("This object already has already been inscribed with runes."); return;
                        }

                        else
                        {
                            from.SendGump(new BasicAttributeGump(item, from, tool)); return;
                        }
                    }

                    //if (tool.Type == RuneApplicationTool.ApplyType.Wood)
                    //{
                    //    if (item is BaseWeapon)
                    //    {
                    //        BaseWeapon weapon = item as BaseWeapon;

                    //        if (!weapon.Attributes.IsEmpty || !weapon.WeaponAttributes.IsEmpty)
                    //        {
                    //            from.SendMessage("This object already has already been inscribed with runes."); return;
                    //        }

                    //        if (CraftResources.GetType(weapon.Resource) == CraftResourceType.Wood)
                    //        {
                    //            from.SendGump(new BasicAttributeGump(item, from));
                    //        }

                    //        else from.SendMessage("This is for use on wooden objects only.");
                    //    }

                    //    if (item is BaseArmor)
                    //    {
                    //        BaseArmor armor = item as BaseArmor;

                    //        if (!armor.Attributes.IsEmpty || !armor.ArmorAttributes.IsEmpty)
                    //        {
                    //            from.SendMessage("This object already has already been inscribed with runes."); return;
                    //        }

                    //        if (CraftResources.GetType(armor.Resource) == CraftResourceType.Wood)
                    //        {
                    //            from.SendGump(new BasicAttributeGump(item, from));
                    //        }

                    //    else from.SendMessage("This is for use on wooden objects only.");

                    //    }
                    //}

                    if (tool.Type == RuneApplicationTool.ApplyType.Cloth)
                    {
                        if (item is BaseClothing)
                        {
                            BaseClothing cloth = item as BaseClothing;

                            if (!cloth.Attributes.IsEmpty)
                            {
                                from.SendMessage("This object already has already been inscribed with runes."); return;
                            }

                            if (CraftResources.GetType(cloth.Resource) == CraftResourceType.None)
                            {
                                from.SendGump(new BasicAttributeGump(item, from, tool));
                            }

                            else
                            {
                                from.SendMessage("This is for use on cloth objects only.");
                            }
                        }
                    }
                }
            }
        }
예제 #4
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)
                    {
                    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();

                    if (from is Player)
                    {
                        Craftsman cm = Perk.GetByType <Craftsman>(from as Player);
                        if (cm != null && cm.Savvy())
                        {
                            ingot.Amount += Utility.RandomMinMax(1, 2);
                        }
                    }

                    from.AddToBackpack(ingot);

                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                    return(SmeltResult.Success);
                }
                catch
                {
                }

                return(SmeltResult.Invalid);
            }
예제 #5
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[0];

                    if (craftResource.Amount < 2)
                    {
                        return(SmeltResult.Invalid); // Not enough metal to resmelt
                    }
                    var oreEntry = ZhConfig.Resources.Ores.Entries[(int)resource - 1];

                    var difficulty = oreEntry.SmeltSkillRequired;

                    if (difficulty > from.Skills[SkillName.Mining].Value)
                    {
                        return(SmeltResult.NoSkill);
                    }

                    Type resourceType = info.ResourceTypes[0];
                    Item ingot        = (Item)Activator.CreateInstance(resourceType);

                    if (item is BaseArmor && ((BaseArmor)item).PlayerConstructed ||
                        item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed ||
                        item is BaseClothing && ((BaseClothing)item).PlayerConstructed)
                    {
                        ingot.Amount = craftResource.Amount / 2;
                    }
                    else
                    {
                        ingot.Amount = 1;
                    }

                    item.Delete();
                    from.AddToBackpack(ingot);

                    from.PlaySound(0x2B);
                    return(SmeltResult.Success);
                }
                catch
                {
                }

                return(SmeltResult.Invalid);
            }
예제 #6
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 = resource switch
                    {
                        CraftResource.Iron => 60,
                        CraftResource.Gold => 60,
                        CraftResource.Spike => 60,
                        CraftResource.Fruity => 60,
                        CraftResource.Bronze => 60,
                        CraftResource.IceRock => 60,
                        CraftResource.BlackDwarf => 60,
                        CraftResource.DullCopper => 60,
                        CraftResource.Platinum => 60,
                        CraftResource.SilverRock => 60,
                        CraftResource.DarkPagan => 60,
                        CraftResource.Copper => 60,
                        CraftResource.Mystic => 60,
                        CraftResource.Spectral => 60,
                        CraftResource.OldBritain => 60,
                        CraftResource.Onyx => 60,
                        CraftResource.RedElven => 60,
                        CraftResource.Undead => 60,
                        CraftResource.Pyrite => 60,
                        CraftResource.Virginity => 60,
                        CraftResource.Malachite => 60,
                        CraftResource.Lavarock => 60,
                        CraftResource.Azurite => 60,
                        CraftResource.Dripstone => 60,
                        CraftResource.Executor => 60,
                        CraftResource.Peachblue => 60,
                        CraftResource.Destruction => 60,
                        CraftResource.Anra => 60,
                        CraftResource.Crystal => 60,
                        CraftResource.Doom => 60,
                        CraftResource.Goddess => 60,
                        CraftResource.NewZulu => 60,
                        CraftResource.DarkSableRuby => 60,
                        CraftResource.EbonTwilightSapphire => 60,
                        CraftResource.RadiantNimbusDiamond => 60,
                        _ => 0.0
                    };

                    if (difficulty > from.Skills[SkillName.Mining].Value)
                    {
                        return(SmeltResult.NoSkill);
                    }

                    Type resourceType = info.ResourceTypes[0];
                    Item ingot        = (Item)Activator.CreateInstance(resourceType);

                    if (item is BaseArmor && ((BaseArmor)item).PlayerConstructed || item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed || item is BaseClothing && ((BaseClothing)item).PlayerConstructed)
                    {
                        ingot.Amount = craftResource.Amount / 2;
                    }
                    else
                    {
                        ingot.Amount = 1;
                    }

                    item.Delete();
                    from.AddToBackpack(ingot);

                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                    return(SmeltResult.Success);
                }
                catch
                {
                }

                return(SmeltResult.Invalid);
            }
예제 #7
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
                    }
                    //daat99 OWLTR start - smelting difficulty
                    double difficulty = daat99.ResourceHelper.GetMinSkill(resource);
                    //daat99 OWLTR end - smelting difficulty

                    if (difficulty > from.Skills[SkillName.Mining].Value)
                    {
                        return(SmeltResult.NoSkill);
                    }

                    Type resourceType = info.ResourceTypes[0];
                    Item ingot        = (Item)Activator.CreateInstance(resourceType);

                    if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed))
                    {
                        ingot.Amount = craftResource.Amount / 2;
                    }
                    else
                    {
                        ingot.Amount = 1;
                    }

                    item.Delete();
                    from.AddToBackpack(ingot);

                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                    return(SmeltResult.Success);
                }
                catch
                {
                }

                return(SmeltResult.Invalid);
            }
예제 #8
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 = Craft.CraftSystem.CraftItems.SearchFor(item.GetType());

                if (craftItem == null || craftItem.Ressources.Count == 0)
                {
                    return(SmeltResult.Invalid);
                }

                CraftRes craftResource = craftItem.Ressources.GetAt(0);

                if (craftResource.Amount < 2)
                {
                    return(SmeltResult.Invalid);                    // Not enough metal to resmelt
                }
                double difficulty = 0.0;

                switch (resource)
                {
                case CraftResource.DullCopper: difficulty = 65.0; break;

                case CraftResource.ShadowIron: difficulty = 70.0; break;

                case CraftResource.Copper: difficulty = 75.0; break;

                case CraftResource.Bronze: difficulty = 80.0; break;

                case CraftResource.Gold: difficulty = 85.0; break;

                case CraftResource.Agapite: difficulty = 90.0; break;

                case CraftResource.Verite: difficulty = 95.0; break;

                case CraftResource.Valorite: difficulty = 99.0; break;
                }

                if (difficulty > from.Skills[SkillName.Mining].Value)
                {
                    return(SmeltResult.NoSkill);
                }

                Type resourceType = info.ResourceTypes[0];
                Item ingot        = (Item)Activator.CreateInstance(resourceType);

                if (item is DragonBardingDeed || (item is BaseArmor && !item.StoreBought) || (item is BaseWeapon && !item.StoreBought) || (item is BaseClothing && !item.StoreBought))
                {
                    ingot.Amount = craftResource.Amount / 2;
                }
                else
                {
                    ingot.Amount = 1;
                }

                /* Publish - September 22, 1999
                 * Items you wish to smelt must be in your back-pack.
                 * Smelting will be tied to the mining skill. The higher your skill in mining, the more ingots you will get back.
                 * The more wear and tear on an item, the less ingots it will return.
                 * Items purchased from an NPC will yield only one ingot when smelted.
                 * http://www.uoguide.com/Publish_-_September_22,_1999
                 */
                if (Core.UOSP)
                {
                    double amount = (double)ingot.Amount;

                    // Smelting will be tied to the mining skill. The higher your skill in mining, the more ingots you will get back.
                    amount = amount / 2 + ((amount / 2) * (from.Skills[SkillName.Mining].Value / 100));

                    // The more wear and tear on an item, the less ingots it will return.
                    double MaxHitPoints = 0;
                    double HitPoints    = 0;
                    if (item is BaseWeapon)
                    {
                        MaxHitPoints = (double)(item as BaseWeapon).MaxHitPoints;
                        HitPoints    = (double)(item as BaseWeapon).HitPoints;
                    }
                    else if (item is BaseArmor)
                    {
                        MaxHitPoints = (double)(item as BaseArmor).MaxHitPoints;
                        HitPoints    = (double)(item as BaseArmor).HitPoints;
                    }

                    // reduce the ingots by the amount of wear on the item. An item that is 50% worn out will reduce the ingots by 50%
                    double difference = ((MaxHitPoints - HitPoints) / MaxHitPoints) * 100.0;
                    if (difference > 0.0)
                    {
                        amount *= (100.0 - difference) / 100.0;
                    }

                    // okay, adjust ingot output
                    ingot.Amount = (int)Math.Round(amount);

                    if (ingot.Amount < 1)
                    {
                        ingot.Amount = 1;
                    }
                }

                item.Delete();
                from.AddToBackpack(ingot);

                from.PlaySound(0x2A);
                from.PlaySound(0x240);
                return(SmeltResult.Success);
            }
            catch (Exception ex) { EventSink.InvokeLogException(new LogExceptionEventArgs(ex)); }

            return(SmeltResult.Success);
        }
예제 #9
0
        private static bool DoResmelt(CraftSystem system, Mobile from, Item item, CraftResource resource, bool playSound)
        {
            try
            {
                if (CraftResources.GetType(resource) != CraftResourceType.Metal)
                {
                    return(false);
                }

                CraftResourceInfo info = CraftResources.GetInfo(resource);

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

                if (!CheckResourceSkill(info.Resource, from.Skills[SkillName.Mining].Value))
                {
                    return(false);
                }

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

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

                CraftRes craftResource = craftItem.Ressources.GetAt(0);

                if (craftResource.Amount < 2)
                {
                    return(false);                    // Not enough metal to resmelt
                }
                Type resourceType = info.ResourceTypes[0];
                Item ingot        = (Item)Activator.CreateInstance(resourceType);

                if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed))
                {
                    ingot.Amount = craftResource.Amount / 2;
                }
                else
                {
                    ingot.Amount = 1;
                }

                item.Delete();
                from.AddToBackpack(ingot);

                if (playSound)
                {
                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                }

                return(true);
            }
            catch
            {
            }

            return(false);
        }
예제 #10
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)
        {
            FixedParticles(0x376A, 20, 10, 0x2530, EffectLayer.Waist);
            PlaySound(0x2F4);

            int discordanceEffect = 0;

            if (attacker is PlayerMobile && 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(Location, 2) &&
                    0.15 > Utility.RandomDouble())
                {
                    var 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)
                        {
                            var 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)
                        {
                            var 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);
                        }

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

            base.OnGotMeleeAttack(attacker);
        }
예제 #11
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 = m_CraftSystem.CraftItems.SearchFor(item.GetType());

                    if (craftItem == null || craftItem.Resources.Count == 0)
                    {
                        return(SmeltResult.Invalid);
                    }

                    CraftRes craftResource = craftItem.Resources.GetAt(0);

                    if (craftResource.Amount < 2)
                    {
                        return(SmeltResult.Invalid);                        // Not enough metal to resmelt
                    }
                    double difficulty = 0.0;

                    switch (resource)
                    {
                    case CraftResource.MRusty: difficulty = 50.0; break;

                    case CraftResource.MOldcopper: difficulty = 60.0; break;

                    case CraftResource.MDullcopper: difficulty = 65.0; break;

                    case CraftResource.MShadow: difficulty = 70.0; break;

                    case CraftResource.MCopper: difficulty = 75.0; break;

                    case CraftResource.MBronze: difficulty = 80.0; break;

                    case CraftResource.MGold: difficulty = 85.0; break;

                    case CraftResource.MRose: difficulty = 87.0; break;

                    case CraftResource.MAgapite: difficulty = 90.0; break;

                    case CraftResource.MValorite: difficulty = 90.0; break;

                    case CraftResource.MBloodrock: difficulty = 93.0; break;

                    case CraftResource.MVerite: difficulty = 95.0; break;

                    case CraftResource.MSilver: difficulty = 95.0; break;

                    case CraftResource.MDragon: difficulty = 95.0; break;

                    case CraftResource.MTitan: difficulty = 95.0; break;

                    case CraftResource.MCrystaline: difficulty = 95.0; break;

                    case CraftResource.MKrynite: difficulty = 95.0; break;

                    case CraftResource.MVulcan: difficulty = 95.0; break;

                    case CraftResource.MBloodcrest: difficulty = 95.0; break;

                    case CraftResource.MElvin: difficulty = 95.0; break;

                    case CraftResource.MAcid: difficulty = 95.0; break;

                    case CraftResource.MAqua: difficulty = 95.0; break;

                    case CraftResource.MEldar: difficulty = 95.0; break;

                    case CraftResource.MGlowing: difficulty = 95.0; break;

                    case CraftResource.MGorgan: difficulty = 95.0; break;

                    case CraftResource.MSteel: difficulty = 95.5; break;

                    case CraftResource.MSandrock: difficulty = 95.0; break;

                    case CraftResource.MMytheril: difficulty = 97.5; break;

                    case CraftResource.MBlackrock: difficulty = 98.0; break;
                    }

                    if (difficulty > from.Skills[SkillName.Mining].Value)
                    {
                        return(SmeltResult.NoSkill);
                    }

                    Type resourceType = info.ResourceTypes[0];
                    Item ingot        = (Item)Activator.CreateInstance(resourceType);

                    if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed))
                    {
                        ingot.Amount = craftResource.Amount / 2;
                    }
                    else
                    {
                        ingot.Amount = 1;
                    }

                    item.Delete();
                    from.AddToBackpack(ingot);

                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                    return(SmeltResult.Success);
                }
                catch
                {
                }

                return(SmeltResult.Invalid);
            }
예제 #12
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)
                    {
                    case CraftResource.DullCopper: difficulty = 65.0; break;

                    case CraftResource.ShadowIron: difficulty = 70.0; break;

                    case CraftResource.Copper: difficulty = 75.0; break;

                    case CraftResource.Bronze: difficulty = 80.0; break;

                    case CraftResource.Gold: difficulty = 85.0; break;

                    case CraftResource.Agapite: difficulty = 90.0; break;

                    case CraftResource.Verite: difficulty = 95.0; break;

                    case CraftResource.Valorite: difficulty = 99.0; break;
                    }

                    if (difficulty > from.Skills[SkillName.Mining].Value)
                    {
                        return(SmeltResult.NoSkill);
                    }

                    Type resourceType = info.ResourceTypes[0];
                    Item ingot        = (Item)Activator.CreateInstance(resourceType);

                    if (item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed))
                    {
                        ingot.Amount = craftResource.Amount / 2;
                    }
                    else
                    {
                        ingot.Amount = 1;
                    }

                    if (item.Amount > 1)
                    {
                        item.Amount--;
                    }
                    else
                    {
                        item.Delete();
                    }

                    #region Add to pack or ground if overweight
                    //Taran: Check to see if player is overweight. If they are and the item drops to the
                    //ground then a check is made to see if it can be stacked. If it can't and  more than
                    //20 items of the same type exist in the same tile then the last item gets removed. This
                    //check is made so thousands of items can't exist in 1 tile and crash people in the same area.
                    if (from.AddToBackpack(ingot))
                    {
                        from.SendAsciiMessage("You put the {0} in your pack.", ingot.Name ?? CliLoc.LocToString(ingot.LabelNumber));
                    }
                    else if (!ingot.Deleted)
                    {
                        IPooledEnumerable eable = from.Map.GetItemsInRange(from.Location, 0);
                        int  amount             = 0;
                        Item toRemove           = null;

                        foreach (Item i in eable)
                        {
                            if (i != ingot && i.ItemID == ingot.ItemID)
                            {
                                if (i.StackWith(from, ingot, false))
                                {
                                    toRemove = ingot;
                                    break;
                                }

                                amount++;
                            }
                        }

                        from.SendAsciiMessage("You are overweight and put the {0} on the ground.", ingot.Name ?? CliLoc.LocToString(ingot.LabelNumber));

                        if (toRemove != null)
                        {
                            toRemove.Delete();
                        }

                        else if (amount >= 5 && amount < 20)
                        {
                            from.LocalOverheadMessage(MessageType.Regular, 906, true, string.Format("{0} identical items on the ground detected, no more than 20 is allowed!", amount));
                        }

                        else if (amount >= 20)
                        {
                            from.LocalOverheadMessage(MessageType.Regular, 906, true, "Too many identical items on the ground, removing!");
                            ingot.Delete();
                        }

                        eable.Free();
                    }
                    #endregion

                    from.PlaySound(0x2A);
                    from.PlaySound(0x240);
                    return(SmeltResult.Success);
                }
                catch
                {
                }

                return(SmeltResult.Invalid);
            }
예제 #13
0
    private bool Resmelt(Mobile from, Item item, CraftResource resource)
    {
        try
        {
            if (CraftResources.GetType(resource) != CraftResourceType.Metal)
            {
                return(false);
            }

            var info = CraftResources.GetInfo(resource);

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

            var craftItem = DefBlacksmithy.CraftSystem.CraftItems.SearchFor(item.GetType());

            if (craftItem == null || craftItem.Resources.Count == 0)
            {
                return(false);
            }

            var craftResource = craftItem.Resources[0];

            if (craftResource.Amount < 2)
            {
                return(false); // Not enough metal to resmelt
            }

            var difficulty = resource switch
            {
                CraftResource.DullCopper => 65.0,
                CraftResource.ShadowIron => 70.0,
                CraftResource.Copper => 75.0,
                CraftResource.Bronze => 80.0,
                CraftResource.Gold => 85.0,
                CraftResource.Agapite => 90.0,
                CraftResource.Verite => 95.0,
                CraftResource.Valorite => 99.0,
                _ => 0.0
            };

            var ingot = info.ResourceTypes[0].CreateInstance <Item>();

            if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed ||
                item is BaseWeapon weapon && weapon.PlayerConstructed ||
                item is BaseClothing clothing && clothing.PlayerConstructed)
            {
                var mining = from.Skills.Mining.Value;
                if (mining > 100.0)
                {
                    mining = 100.0;
                }

                var amount = ((4 + mining) * craftResource.Amount - 4) * 0.0068;
                if (amount < 2)
                {
                    ingot.Amount = 2;
                }
                else
                {
                    ingot.Amount = (int)amount;
                }
            }
            else
            {
                ingot.Amount = 2;
            }

            if (difficulty > from.Skills.Mining.Value)
            {
                m_Failure = true;
                ingot.Delete();
            }
            else
            {
                item.Delete();
            }

            from.AddToBackpack(ingot);

            from.PlaySound(0x2A);
            from.PlaySound(0x240);

            return(true);
        }