Exemplo n.º 1
0
        private static WorldObject AssignArmorLevel(WorldObject wo, int tier, LootTables.ArmorType armorType)
        {
            var baseArmorLevel = wo.GetProperty(PropertyInt.ArmorLevel) ?? 0;

            if (baseArmorLevel > 0)
            {
                int adjustedArmorLevel = baseArmorLevel + GetArmorLevelModifier(tier, armorType);
                wo.SetProperty(PropertyInt.ArmorLevel, adjustedArmorLevel);
            }

            return(wo);
        }
Exemplo n.º 2
0
        private static void MutateArmor(WorldObject wo, TreasureDeath profile, bool isMagical, LootTables.ArmorType armorType, TreasureRoll roll = null)
        {
            // material type
            var materialType = GetMaterialType(wo, profile.Tier);

            if (materialType > 0)
            {
                wo.MaterialType = materialType;
            }

            // item color
            MutateColor(wo);

            // gem count / gem material
            if (wo.GemCode != null)
            {
                wo.GemCount = GemCountChance.Roll(wo.GemCode.Value, profile.Tier);
            }
            else
            {
                wo.GemCount = ThreadSafeRandom.Next(1, 6);
            }

            wo.GemType = RollGemType(profile.Tier);

            // workmanship
            wo.ItemWorkmanship = WorkmanshipChance.Roll(profile.Tier);

            // burden
            if (wo.HasMutateFilter(MutateFilter.EncumbranceVal))  // fixme: data
            {
                MutateBurden(wo, profile, false);
            }

            if (roll == null)
            {
                if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                {
                    int chance     = ThreadSafeRandom.Next(1, 3);
                    var wieldSkill = chance switch
                    {
                        1 => Skill.MagicDefense,
                        2 => Skill.MissileDefense,
                        _ => Skill.MeleeDefense,
                    };

                    wo.WieldRequirements = WieldRequirement.RawSkill;
                    wo.WieldSkillType    = (int)wieldSkill;
                    wo.WieldDifficulty   = GetCovenantWieldReq(profile.Tier, wieldSkill);
                }
                else if (profile.Tier > 6)
                {
                    wo.WieldRequirements = WieldRequirement.Level;
                    wo.WieldSkillType    = (int)Skill.Axe; // Set by examples from PCAP data

                    wo.WieldDifficulty = profile.Tier switch
                    {
                        7 => 150,  // In this instance, used for indicating player level, rather than skill level
                        _ => 180,  // In this instance, used for indicating player level, rather than skill level
                    };
                }
            }
            else if (profile.Tier > 6 && !wo.HasArmorLevel())
            {
                // normally this is handled in the mutation script for armor
                // for clothing, just calling the generic method here
                RollWieldLevelReq_T7_T8(wo, profile);
            }

            if (roll == null)
            {
                AssignArmorLevel(wo, profile.Tier, armorType);
            }
            else
            {
                AssignArmorLevel_New(wo, profile, roll);
            }

            if (wo.HasMutateFilter(MutateFilter.ArmorModVsType))
            {
                MutateArmorModVsType(wo, profile);
            }

            if (isMagical)
            {
                AssignMagic(wo, profile, roll, true);
            }
            else
            {
                wo.ItemManaCost   = null;
                wo.ItemMaxMana    = null;
                wo.ItemCurMana    = null;
                wo.ItemSpellcraft = null;
                wo.ItemDifficulty = null;
            }

            if (profile.Tier > 6)
            {
                TryRollEquipmentSet(wo, profile, roll);
            }

            if (roll != null && profile.Tier == 8)
            {
                TryMutateGearRating(wo, profile, roll);
            }

            // item value
            //if (wo.HasMutateFilter(MutateFilter.Value))   // fixme: data
            MutateValue(wo, profile.Tier, roll);

            wo.LongDesc = GetLongDesc(wo);
        }
Exemplo n.º 3
0
        private static void AssignArmorLevelCompat(WorldObject wo, int tier, LootTables.ArmorType armorType)
        {
            log.Debug($"[LOOT] Using AL Assignment Compatibility layer for item {wo.WeenieClassId} - {wo.Name}.");

            var baseArmorLevel = wo.ArmorLevel ?? 0;

            if (baseArmorLevel > 0)
            {
                int armorModValue = 0;

                if (armorType > LootTables.ArmorType.HaebreanArmor && armorType <= LootTables.ArmorType.OlthoiAlduressaArmor)
                {
                    // Even if most are not using T8, made a change to that outcome to ensure that Olthoi Alduressa doesn't go way out of spec
                    // Side effect is that Haebrean to Olthoi Celdon may suffer
                    armorModValue = tier switch
                    {
                        7 => ThreadSafeRandom.Next(0, 40),
                        8 => ThreadSafeRandom.Next(91, 115),
                        _ => 0,
                    };
                }
                else
                {
                    switch (tier)
                    {
                    case 1:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(0, 27);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(0, 23);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(0, 40);
                        }
                        break;

                    case 2:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(27, 54);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(23, 46);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(40, 80);
                        }
                        break;

                    case 3:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(54, 81);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(46, 69);
                        }

                        else if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(90, 130);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(80, 120);
                        }
                        break;

                    case 4:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(81, 108);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(69, 92);
                        }

                        else if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(130, 170);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(120, 160);
                        }
                        break;

                    case 5:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(108, 135);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(92, 115);
                        }

                        else if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(170, 210);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(160, 200);
                        }
                        break;

                    case 6:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(135, 162);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(115, 138);
                        }

                        else if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(210, 250);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(200, 240);
                        }
                        break;

                    case 7:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(162, 189);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(138, 161);
                        }

                        else if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(250, 290);
                        }

                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(240, 280);
                        }
                        break;

                    case 8:
                        if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                            armorType == LootTables.ArmorType.Helms ||
                            armorType == LootTables.ArmorType.Shields)
                        {
                            armorModValue = ThreadSafeRandom.Next(189, 216);
                        }

                        else if (armorType == LootTables.ArmorType.LeatherArmor ||
                                 armorType == LootTables.ArmorType.MiscClothing)
                        {
                            armorModValue = ThreadSafeRandom.Next(161, 184);
                        }

                        else if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(290, 330);
                        }

                        else if (armorType == LootTables.ArmorType.SocietyArmor)
                        {
                            armorModValue = ThreadSafeRandom.Next(189, 216);
                        }
                        else
                        {
                            armorModValue = ThreadSafeRandom.Next(280, 320);
                        }
                        break;

                    default:
                        armorModValue = 0;
                        break;
                    }
                }

                int adjustedArmorLevel = baseArmorLevel + armorModValue;
                wo.ArmorLevel = adjustedArmorLevel;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Assign a final AL value based upon tier
        /// Used values given at https://asheron.fandom.com/wiki/Loot#Armor_Levels for setting the AL mod values
        /// so as to not exceed the values listed in that table
        /// </summary>
        private static void AssignArmorLevel(WorldObject wo, int tier, LootTables.ArmorType armorType)
        {
            if (wo.ArmorType == null)
            {
                log.Warn($"[LOOT] Missing PropertyInt.ArmorType on loot item {wo.WeenieClassId} - {wo.Name}");
                return;
            }

            var baseArmorLevel = wo.ArmorLevel ?? 0;

            if (((wo.ClothingPriority & (CoverageMask)CoverageMaskHelper.Underwear) == 0) || wo.IsShield)
            {
                int armorModValue = 0;

                // Account for ACE World Databases that have not yet been updated
                if (wo.ArmorType != (int)ArmorType.Cloth && (wo.GetProperty(PropertyInt.Version) ?? 0) < 3)
                {
                    AssignArmorLevelCompat(wo, tier, armorType);
                }

                // Sets AL variations based on weenie ArmorType field, such as cloth, leather, metal, etc.
                switch (tier)
                {
                case 1:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(0, 25);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(0, 29);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(0, 26);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    // Does not drop at this tier level
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = 0;
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(5, 22);
                    }
                    break;

                case 2:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(25, 50);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(29, 52);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(26, 50);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    // Does not drop at this tier level
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = 0;
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(22, 39);
                    }
                    break;

                case 3:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(50, 75);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(52, 75);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(50, 74);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = ThreadSafeRandom.Next(190, 210);
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(39, 56);
                    }
                    break;

                case 4:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(75, 100);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(75, 98);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(74, 98);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = ThreadSafeRandom.Next(210, 230);
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(56, 73);
                    }
                    break;

                case 5:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(100, 125);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(98, 121);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(98, 122);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = ThreadSafeRandom.Next(230, 250);
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(73, 90);
                    }
                    break;

                case 6:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(125, 150);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(121, 144);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(122, 146);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = ThreadSafeRandom.Next(250, 270);
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(90, 107);
                    }
                    break;

                case 7:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(150, 175);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(144, 167);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(146, 170);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = ThreadSafeRandom.Next(270, 290);
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(107, 124);
                    }
                    break;

                case 8:
                    if (wo.ArmorType == (int)ArmorType.Cloth)
                    {
                        armorModValue = ThreadSafeRandom.Next(175, 200);
                    }
                    if (wo.ArmorType == (int)ArmorType.Leather ||
                        wo.ArmorType == (int)ArmorType.StuddedLeather)
                    {
                        armorModValue = ThreadSafeRandom.Next(167, 190);
                    }
                    if (wo.ArmorType == (int)ArmorType.Metal ||
                        wo.ArmorType == (int)ArmorType.Chainmail ||
                        wo.ArmorType == (int)ArmorType.Scalemail)
                    {
                        armorModValue = ThreadSafeRandom.Next(170, 194);
                    }
                    // Covenant and Olthoi Armor (not Amuli, Celdon, Koujia, or Alduressa types of Olthoi Armor)
                    if (wo.ResistMagic != null && wo.ResistMagic == 9999)
                    {
                        armorModValue = ThreadSafeRandom.Next(290, 310);
                    }
                    if (wo.IsShield)
                    {
                        armorModValue = ThreadSafeRandom.Next(124, 141);
                    }
                    break;
                }

                int adjustedArmorLevel = baseArmorLevel + armorModValue;
                wo.ArmorLevel = adjustedArmorLevel;
            }

            if ((wo.ResistMagic == null || wo.ResistMagic < 9999) && wo.ArmorLevel >= 345)
            {
                log.Warn($"[LOOT] Standard armor item exceeding upper AL threshold {wo.WeenieClassId} - {wo.Name}");
            }
        }
Exemplo n.º 5
0
        private static void MutateArmor(WorldObject wo, TreasureDeath profile, bool isMagical, LootTables.ArmorType armorType)
        {
            wo.LongDesc = wo.Name;

            //wo.AppraisalItemSkill = 7;
            //wo.AppraisalLongDescDecoration = AppraisalLongDescDecorations.PrependWorkmanship;

            int materialType = GetMaterialType(wo, profile.Tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }

            int gemCount = ThreadSafeRandom.Next(1, 6);
            int gemType  = ThreadSafeRandom.Next(10, 50);

            wo.GemCount = gemCount;
            wo.GemType  = (MaterialType)gemType;

            int workmanship = GetWorkmanship(profile.Tier);

            wo.ItemWorkmanship = workmanship;

            double materialMod    = LootTables.getMaterialValueModifier(wo);
            double gemMaterialMod = LootTables.getGemMaterialValueModifier(wo);
            var    value          = GetValue(profile.Tier, workmanship, gemMaterialMod, materialMod);

            wo.Value = value;

            int wield;

            if (profile.Tier > 6 && armorType != LootTables.ArmorType.CovenantArmor)
            {
                wo.WieldRequirements = WieldRequirement.Level;
                wo.WieldSkillType    = (int)Skill.Axe; // Set by examples from PCAP data

                wield = profile.Tier switch
                {
                    7 => 150, // In this instance, used for indicating player level, rather than skill level
                    _ => 180, // In this instance, used for indicating player level, rather than skill level
                };

                wo.WieldDifficulty = wield;
            }

            if (armorType == LootTables.ArmorType.CovenantArmor)
            {
                int chance     = ThreadSafeRandom.Next(1, 3);
                var wieldSkill = chance switch
                {
                    1 => Skill.MagicDefense,
                    2 => Skill.MissileDefense,
                    _ => Skill.MeleeDefense,
                };
                wield = GetCovenantWieldReq(profile.Tier, wieldSkill);

                wo.WieldRequirements = WieldRequirement.RawSkill;
                wo.WieldSkillType    = (int)wieldSkill;
                wo.WieldDifficulty   = wield;

                // used by tinkering requirements for copper/silver
                wo.ItemSkillLimit = (uint)wieldSkill;
            }

            // Setting random color
            wo.PaletteTemplate = ThreadSafeRandom.Next(1, 2047);
            wo.Shade           = .1 * ThreadSafeRandom.Next(0, 9);

            wo = AssignArmorLevel(wo, profile.Tier, armorType);

            wo = AssignEquipmentSetId(wo, profile);

            if (isMagical)
            {
                bool covenantArmor = false || (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor);
                wo = AssignMagic(wo, profile, covenantArmor);
            }
            else
            {
                wo.ItemManaCost   = null;
                wo.ItemMaxMana    = null;
                wo.ItemCurMana    = null;
                wo.ItemSpellcraft = null;
                wo.ItemDifficulty = null;
            }

            // try mutate burden, if MutateFilter exists
            if (wo.HasMutateFilter(MutateFilter.EncumbranceVal))
            {
                MutateBurden(wo, profile.Tier, false);
            }

            RandomizeColor(wo);
        }
Exemplo n.º 6
0
        private static WorldObject CreateArmor(TreasureDeath profile, bool isMagical, bool isArmor, LootBias lootBias = LootBias.UnBiased, bool mutate = true)
        {
            var minType = LootTables.ArmorType.Helms;
            var maxType = new LootTables.ArmorType();

            switch (profile.Tier)
            {
            case 1:
            default:
                maxType = LootTables.ArmorType.ChainmailArmor;
                break;

            case 2:
                maxType = LootTables.ArmorType.DiforsaArmor;
                break;

            case 3:
            case 4:
                maxType = LootTables.ArmorType.CovenantArmor;
                break;

            case 5:
                maxType = LootTables.ArmorType.AlduressaArmor;
                break;

            case 6:
                maxType = LootTables.ArmorType.HaebreanArmor;
                break;

            case 7:
            case 8:
                maxType = LootTables.ArmorType.OlthoiAlduressaArmor;
                break;
            }

            // Added for making clothing drops their own drop, and not involved in armor roll chance
            LootTables.ArmorType armorType;
            if (isArmor == true)
            {
                armorType = (LootTables.ArmorType)ThreadSafeRandom.Next((int)minType, (int)maxType);
            }
            else
            {
                armorType = LootTables.ArmorType.MiscClothing;
            }

            int[] table = LootTables.GetLootTable(armorType);

            int rng = ThreadSafeRandom.Next(0, table.Length - 1);

            int armorWeenie = table[rng];

            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)armorWeenie);

            if (wo != null && mutate)
            {
                MutateArmor(wo, profile, isMagical, armorType);
            }

            return(wo);
        }
        private static void MutateArmor(WorldObject wo, TreasureDeath profile, bool isMagical, LootTables.ArmorType armorType, TreasureRoll roll = null)
        {
            // material type
            int materialType = GetMaterialType(wo, profile.Tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }

            // item color
            MutateColor(wo);

            // gem count / gem material
            if (wo.GemCode != null)
            {
                wo.GemCount = GemCountChance.Roll(wo.GemCode.Value, profile.Tier);
            }
            else
            {
                wo.GemCount = ThreadSafeRandom.Next(1, 6);
            }

            wo.GemType = RollGemType(profile.Tier);

            // workmanship
            wo.ItemWorkmanship = WorkmanshipChance.Roll(profile.Tier);

            // try mutate burden, if MutateFilter exists
            if (wo.HasMutateFilter(MutateFilter.EncumbranceVal))
            {
                MutateBurden(wo, profile, false);
            }

            if (profile.Tier > 6 && armorType != LootTables.ArmorType.CovenantArmor && armorType != LootTables.ArmorType.OlthoiArmor)
            {
                wo.WieldRequirements = WieldRequirement.Level;
                wo.WieldSkillType    = (int)Skill.Axe; // Set by examples from PCAP data

                wo.WieldDifficulty = profile.Tier switch
                {
                    7 => 150, // In this instance, used for indicating player level, rather than skill level
                    _ => 180, // In this instance, used for indicating player level, rather than skill level
                };
            }

            if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
            {
                int chance     = ThreadSafeRandom.Next(1, 3);
                var wieldSkill = chance switch
                {
                    1 => Skill.MagicDefense,
                    2 => Skill.MissileDefense,
                    _ => Skill.MeleeDefense,
                };

                wo.WieldRequirements = WieldRequirement.RawSkill;
                wo.WieldSkillType    = (int)wieldSkill;
                wo.WieldDifficulty   = GetCovenantWieldReq(profile.Tier, wieldSkill);

                // used by tinkering requirements for copper/silver
                wo.ItemSkillLimit = wieldSkill;
            }

            wo = AssignArmorLevel(wo, profile.Tier, armorType);

            wo = AssignEquipmentSetId(wo, profile);

            if (isMagical)
            {
                //bool covenantArmor = false || (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor);
                AssignMagic(wo, profile, roll, true);
            }
            else
            {
                wo.ItemManaCost   = null;
                wo.ItemMaxMana    = null;
                wo.ItemCurMana    = null;
                wo.ItemSpellcraft = null;
                wo.ItemDifficulty = null;
            }

            if (wo.HasMutateFilter(MutateFilter.ArmorModVsType) && wo.ArmorLevel > 0)
            {
                // covenant armor and olthoi armor appear to have different mutation methods possibly
                if (armorType != LootTables.ArmorType.CovenantArmor && armorType != LootTables.ArmorType.OlthoiArmor)
                {
                    MutateArmorModVsType(wo, profile);
                }
            }

            if (roll != null && profile.Tier == 8)
            {
                TryMutateGearRating(wo, profile, roll);
            }

            // item value
            wo.Value = Roll_ItemValue(wo, profile.Tier);

            wo.LongDesc = GetLongDesc(wo);
        }
Exemplo n.º 8
0
        private static WorldObject CreateArmor(TreasureDeath profile, bool isMagical, bool isArmor, LootBias lootBias = LootBias.UnBiased)
        {
            var minType = LootTables.ArmorType.Helms;
            var maxType = new LootTables.ArmorType();

            switch (profile.Tier)
            {
            case 1:
            default:
                maxType = LootTables.ArmorType.ChainmailArmor;
                break;

            case 2:
                maxType = LootTables.ArmorType.DiforsaArmor;
                break;

            case 3:
            case 4:
                maxType = LootTables.ArmorType.CovenantArmor;
                break;

            case 5:
                maxType = LootTables.ArmorType.AlduressaArmor;
                break;

            case 6:
                maxType = LootTables.ArmorType.HaebreanArmor;
                break;

            case 7:
            case 8:
                maxType = LootTables.ArmorType.OlthoiAlduressaArmor;


                break;
            }

            // Added for making clothing drops their own drop, and not involved in armor roll chance
            LootTables.ArmorType armorType;
            if (isArmor == true)
            {
                armorType = (LootTables.ArmorType)ThreadSafeRandom.Next((int)minType, (int)maxType);
            }
            else
            {
                armorType = LootTables.ArmorType.MiscClothing;
            }

            int[] table = LootTables.GetLootTable(armorType);

            int rng = ThreadSafeRandom.Next(0, table.Length - 1);

            int armorWeenie = table[rng];

            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)armorWeenie);

            if (wo == null)
            {
                return(null);
            }

            wo.SetProperty(PropertyString.LongDesc, wo.GetProperty(PropertyString.Name));

            wo.SetProperty(PropertyInt.AppraisalItemSkill, 7);
            wo.SetProperty(PropertyInt.AppraisalLongDescDecoration, 1);

            int materialType = GetMaterialType(wo, profile.Tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }

            int gemCount = ThreadSafeRandom.Next(1, 6);
            int gemType  = ThreadSafeRandom.Next(10, 50);

            wo.SetProperty(PropertyInt.GemCount, gemCount);
            wo.SetProperty(PropertyInt.GemType, gemType);

            int workmanship = GetWorkmanship(profile.Tier);

            wo.SetProperty(PropertyInt.ItemWorkmanship, workmanship);

            double materialMod    = LootTables.getMaterialValueModifier(wo);
            double gemMaterialMod = LootTables.getGemMaterialValueModifier(wo);
            var    value          = GetValue(profile.Tier, workmanship, gemMaterialMod, materialMod);

            wo.Value = value;

            int wield;

            if (profile.Tier > 6 && armorType != LootTables.ArmorType.CovenantArmor)
            {
                wo.SetProperty(PropertyInt.WieldRequirements, (int)WieldRequirement.Level);
                wo.SetProperty(PropertyInt.WieldSkillType, (int)Skill.Axe);  // Set by examples from PCAP data

                wield = profile.Tier switch
                {
                    7 => 150, // In this instance, used for indicating player level, rather than skill level
                    _ => 180, // In this instance, used for indicating player level, rather than skill level
                };

                wo.SetProperty(PropertyInt.WieldDifficulty, wield);
            }

            if (armorType == LootTables.ArmorType.CovenantArmor)
            {
                int chance     = ThreadSafeRandom.Next(1, 3);
                var wieldSkill = chance switch
                {
                    // Magic Def
                    1 => Skill.MagicDefense,
                    // Missile Def
                    2 => Skill.MissileDefense,
                    // Melee Def
                    _ => Skill.MeleeDefense,
                };
                wield = GetCovenantWieldReq(profile.Tier, wieldSkill);

                wo.SetProperty(PropertyInt.WieldRequirements, (int)WieldRequirement.RawSkill);
                wo.SetProperty(PropertyInt.WieldSkillType, (int)wieldSkill);
                wo.SetProperty(PropertyInt.WieldDifficulty, wield);
            }

            // Setting random color
            wo.SetProperty(PropertyInt.PaletteTemplate, ThreadSafeRandom.Next(1, 2047));
            double shade = .1 * ThreadSafeRandom.Next(0, 9);

            wo.SetProperty(PropertyFloat.Shade, shade);

            wo = AssignArmorLevel(wo, profile.Tier, armorType);

            wo = AssignEquipmentSetId(wo, profile);

            if (isMagical)
            {
                bool covenantArmor = false || (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor);
                wo = AssignMagic(wo, profile, covenantArmor);
            }
            else
            {
                wo.RemoveProperty(PropertyInt.ItemManaCost);
                wo.RemoveProperty(PropertyInt.ItemMaxMana);
                wo.RemoveProperty(PropertyInt.ItemCurMana);
                wo.RemoveProperty(PropertyInt.ItemSpellcraft);
                wo.RemoveProperty(PropertyInt.ItemDifficulty);
            }

            wo = RandomizeColor(wo);

            return(wo);
        }
Exemplo n.º 9
0
        private static int GetArmorLevelModifier(int tier, LootTables.ArmorType armorType)
        {
            // fixed in pending update synced w/ db
            if (armorType > LootTables.ArmorType.HaebreanArmor && armorType < LootTables.ArmorType.OlthoiAlduressaArmor)
            {
                switch (tier)
                {
                case 7:
                    return(ThreadSafeRandom.Next(0, 40));

                case 8:
                    return(ThreadSafeRandom.Next(160, 200));

                default:
                    return(0);
                }
            }

            switch (tier)
            {
            case 1:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(0, 27));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(0, 23));
                }

                else
                {
                    return(ThreadSafeRandom.Next(0, 40));
                }

            case 2:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(27, 54));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(23, 46));
                }

                else
                {
                    return(ThreadSafeRandom.Next(40, 80));
                }

            case 3:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(54, 81));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(46, 69));
                }

                else if (armorType == LootTables.ArmorType.CovenantArmor)
                {
                    return(ThreadSafeRandom.Next(90, 130));
                }

                else
                {
                    return(ThreadSafeRandom.Next(80, 120));
                }

            case 4:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(81, 108));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(69, 92));
                }

                else if (armorType == LootTables.ArmorType.CovenantArmor)
                {
                    return(ThreadSafeRandom.Next(130, 170));
                }

                else
                {
                    return(ThreadSafeRandom.Next(120, 160));
                }

            case 5:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(108, 135));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(92, 115));
                }

                else if (armorType == LootTables.ArmorType.CovenantArmor)
                {
                    return(ThreadSafeRandom.Next(170, 210));
                }

                else
                {
                    return(ThreadSafeRandom.Next(160, 200));
                }

            case 6:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(135, 162));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(115, 138));
                }

                else if (armorType == LootTables.ArmorType.CovenantArmor)
                {
                    return(ThreadSafeRandom.Next(210, 250));
                }

                else
                {
                    return(ThreadSafeRandom.Next(200, 240));
                }

            case 7:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(162, 189));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(138, 161));
                }

                else if (armorType == LootTables.ArmorType.CovenantArmor)
                {
                    return(ThreadSafeRandom.Next(250, 290));
                }

                else
                {
                    return(ThreadSafeRandom.Next(240, 280));
                }

            case 8:
                if (armorType == LootTables.ArmorType.StuddedLeatherArmor ||
                    armorType == LootTables.ArmorType.Helms ||
                    armorType == LootTables.ArmorType.Shields)
                {
                    return(ThreadSafeRandom.Next(189, 216));
                }

                else if (armorType == LootTables.ArmorType.LeatherArmor ||
                         armorType == LootTables.ArmorType.MiscClothing)
                {
                    return(ThreadSafeRandom.Next(161, 184));
                }

                else if (armorType == LootTables.ArmorType.CovenantArmor)
                {
                    return(ThreadSafeRandom.Next(290, 330));
                }

                else
                {
                    return(ThreadSafeRandom.Next(280, 320));
                }

            default:
                return(0);
            }
        }
Exemplo n.º 10
0
        private static WorldObject CreateArmor(int tier, bool isMagical, LootBias lootBias = LootBias.UnBiased)
        {
            var minType = LootTables.ArmorType.MiscClothing;
            var maxType = new LootTables.ArmorType();

            switch (tier)
            {
            case 1:
            default:
                maxType = LootTables.ArmorType.ChainmailArmor;
                break;

            case 2:
                maxType = LootTables.ArmorType.DiforsaArmor;
                break;

            case 3:
            case 4:
                maxType = LootTables.ArmorType.CovenantArmor;
                break;

            case 5:
                maxType = LootTables.ArmorType.AlduressaArmor;
                break;

            case 6:
                maxType = LootTables.ArmorType.HaebreanArmor;
                break;

            case 7:
            case 8:
                maxType = LootTables.ArmorType.OlthoiAlduressaArmor;

                // armor Mana Forge Chests don't include clothing type items
                if (lootBias == LootBias.Armor)
                {
                    minType = LootTables.ArmorType.Helms;
                }
                break;
            }

            var armorType = (LootTables.ArmorType)ThreadSafeRandom.Next((int)minType, (int)maxType);

            int[] table = LootTables.GetLootTable(armorType);

            int rng = ThreadSafeRandom.Next(0, table.Length - 1);

            int armorWeenie = table[rng];

            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)armorWeenie);

            if (wo == null)
            {
                return(null);
            }

            wo.SetProperty(PropertyString.LongDesc, wo.GetProperty(PropertyString.Name));

            wo.SetProperty(PropertyInt.AppraisalItemSkill, 7);
            wo.SetProperty(PropertyInt.AppraisalLongDescDecoration, 1);

            int materialType = GetMaterialType(wo, tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }

            int gemCount = ThreadSafeRandom.Next(1, 6);
            int gemType  = ThreadSafeRandom.Next(10, 50);

            wo.SetProperty(PropertyInt.GemCount, gemCount);
            wo.SetProperty(PropertyInt.GemType, gemType);

            int workmanship = GetWorkmanship(tier);

            wo.SetProperty(PropertyInt.ItemWorkmanship, workmanship);

            double materialMod    = LootTables.getMaterialValueModifier(wo);
            double gemMaterialMod = LootTables.getGemMaterialValueModifier(wo);
            var    value          = GetValue(tier, workmanship, gemMaterialMod, materialMod);

            wo.Value = value;

            int wield;

            if (tier > 6 && armorType != LootTables.ArmorType.CovenantArmor)
            {
                wo.SetProperty(PropertyInt.WieldRequirements, (int)WieldRequirement.Level);
                wo.SetProperty(PropertyInt.WieldSkillType, (int)Skill.Axe);  // Set by examples from PCAP data

                switch (tier)
                {
                case 7:
                    wield = 150;     // In this instance, used for indicating player level, rather than skill level
                    break;

                default:
                    wield = 180;     // In this instance, used for indicating player level, rather than skill level
                    break;
                }

                wo.SetProperty(PropertyInt.WieldDifficulty, wield);
            }

            if (armorType == LootTables.ArmorType.CovenantArmor)
            {
                Skill wieldSkill;

                int chance = ThreadSafeRandom.Next(1, 3);
                switch (chance)
                {
                case 1:     // Magic Def
                    wieldSkill = Skill.MagicDefense;
                    break;

                case 2:     // Missile Def
                    wieldSkill = Skill.MissileDefense;
                    break;

                default:     // Melee Def
                    wieldSkill = Skill.MeleeDefense;
                    break;
                }

                wield = GetCovenantWieldReq(tier, wieldSkill);

                wo.SetProperty(PropertyInt.WieldRequirements, (int)WieldRequirement.RawSkill);
                wo.SetProperty(PropertyInt.WieldSkillType, (int)wieldSkill);
                wo.SetProperty(PropertyInt.WieldDifficulty, wield);
            }

            // Setting random color
            wo.SetProperty(PropertyInt.PaletteTemplate, ThreadSafeRandom.Next(1, 2047));
            double shade = .1 * ThreadSafeRandom.Next(0, 9);

            wo.SetProperty(PropertyFloat.Shade, shade);

            wo = AssignArmorLevel(wo, tier, armorType);

            wo = AssignEquipmentSetId(wo, tier);

            if (isMagical)
            {
                wo = AssignMagic(wo, tier);
            }
            else
            {
                wo.RemoveProperty(PropertyInt.ItemManaCost);
                wo.RemoveProperty(PropertyInt.ItemMaxMana);
                wo.RemoveProperty(PropertyInt.ItemCurMana);
                wo.RemoveProperty(PropertyInt.ItemSpellcraft);
                wo.RemoveProperty(PropertyInt.ItemDifficulty);
            }

            wo = RandomizeColor(wo);

            return(wo);
        }
Exemplo n.º 11
0
        private static WorldObject CreateArmor(int tier, bool isMagical, bool isArmor, LootBias lootBias = LootBias.UnBiased)
        {
            var minType = LootTables.ArmorType.Helms;
            var maxType = new LootTables.ArmorType();

            switch (tier)
            {
            case 1:
            default:
                maxType = LootTables.ArmorType.ChainmailArmor;
                break;

            case 2:
                maxType = LootTables.ArmorType.DiforsaArmor;
                break;

            case 3:
            case 4:
                maxType = LootTables.ArmorType.CovenantArmor;
                break;

            case 5:
                maxType = LootTables.ArmorType.AlduressaArmor;
                break;

            case 6:
                maxType = LootTables.ArmorType.HaebreanArmor;
                break;

            case 7:
            case 8:
                maxType = LootTables.ArmorType.OlthoiAlduressaArmor;


                break;
            }

            // Added for making clothing drops their own drop, and not involved in armor roll chance
            LootTables.ArmorType armorType;
            if (isArmor == true)
            {
                armorType = (LootTables.ArmorType)ThreadSafeRandom.Next((int)minType, (int)maxType);
            }
            else
            {
                armorType = LootTables.ArmorType.MiscClothing;
            }

            int[] table = LootTables.GetLootTable(armorType);

            int rng = ThreadSafeRandom.Next(0, table.Length - 1);

            int armorWeenie = table[rng];

            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)armorWeenie);

            if (wo == null)
            {
                return(null);
            }

            wo.SetProperty(PropertyString.LongDesc, wo.GetProperty(PropertyString.Name));

            wo.SetProperty(PropertyInt.AppraisalItemSkill, 7);
            wo.SetProperty(PropertyInt.AppraisalLongDescDecoration, 1);

            int materialType = GetMaterialType(wo, tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }

            int gemCount = ThreadSafeRandom.Next(1, 6);
            int gemType  = ThreadSafeRandom.Next(10, 50);

            wo.SetProperty(PropertyInt.GemCount, gemCount);
            wo.SetProperty(PropertyInt.GemType, gemType);

            int workmanship = GetWorkmanship(tier);

            wo.SetProperty(PropertyInt.ItemWorkmanship, workmanship);
Exemplo n.º 12
0
        private static bool AssignArmorLevel_New(WorldObject wo, TreasureDeath profile, TreasureRoll roll, LootTables.ArmorType armorType)
        {
            // retail was only divied up into a few different mutation scripts here
            // anything with ArmorLevel ran these mutation scripts
            // anything that covered extremities (head / hand / foot wear) started with a slightly higher base AL,
            // but otherwise used the same mutation as anything that covered non-extremities
            // shields also had their own mutation script

            // only exceptions found: covenant armor, olthoi armor, metal cap

            if (!roll.HasArmorLevel(wo))
            {
                return(false);
            }

            var scriptName = GetMutationScript_ArmorLevel(wo, roll);

            if (scriptName == null)
            {
                log.Error($"AssignArmorLevel_New({wo.Name}, {profile.TreasureType}, {roll.ItemType}) - unknown item type");
                return(false);
            }

            // persist original values for society armor
            var wieldRequirements = wo.WieldRequirements;
            var wieldSkillType    = wo.WieldSkillType;
            var wieldDifficulty   = wo.WieldDifficulty;

            //Console.WriteLine($"Mutating {wo.Name} with {scriptName}");

            var mutationFilter = MutationCache.GetMutation(scriptName);

            var success = mutationFilter.TryMutate(wo, profile.Tier);

            if (armorType == LootTables.ArmorType.SocietyArmor)
            {
                wo.WieldRequirements = wieldRequirements;
                wo.WieldSkillType    = wieldSkillType;
                wo.WieldDifficulty   = wieldDifficulty;
            }

            return(success);
        }