Exemple #1
0
        /// <summary>
        /// Creates a Melee weapon object.
        /// </summary>
        /// <param name="profile"></param><param name="isMagical"></param>
        /// <returns>Returns Melee Weapon WO</returns>
        public static WorldObject CreateMeleeWeapon(TreasureDeath profile, bool isMagical, int weaponType = -1)
        {
            Skill wieldSkillType = Skill.None;

            int    weaponWeenie       = 0;
            int    damage             = 0;
            double damageVariance     = 0;
            double weaponDefense      = 0;
            double weaponOffense      = 0;
            int    longDescDecoration = 5;

            // Properties for weapons
            double           magicD           = GetMagicMissileDMod(profile.Tier);
            double           missileD         = GetMagicMissileDMod(profile.Tier);
            int              gemCount         = ThreadSafeRandom.Next(1, 5);
            int              gemType          = ThreadSafeRandom.Next(10, 50);
            int              workmanship      = GetWorkmanship(profile.Tier);
            int              wieldDiff        = GetWield(profile.Tier, 3);
            WieldRequirement wieldRequirments = WieldRequirement.RawSkill;

            int eleType = ThreadSafeRandom.Next(0, 4);

            if (weaponType == -1)
            {
                weaponType = ThreadSafeRandom.Next(0, 3);
            }

            // Weapon Types
            // 0 = Heavy
            // 1 = Light
            // 2 = Finesse
            // default = Two Handed
            switch (weaponType)
            {
            case 0:
                // Heavy Weapons
                wieldSkillType = Skill.HeavyWeapons;
                int heavyWeaponsType = ThreadSafeRandom.Next(0, 22);
                weaponWeenie = LootTables.HeavyWeaponsMatrix[heavyWeaponsType][eleType];

                switch (heavyWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 18);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 22);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Axe);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Axe);
                    break;

                case 3:
                case 4:
                case 5:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 20);

                    damage = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Dagger);

                    if (heavyWeaponsType == 3)
                    {
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.Dagger);
                    }
                    if (heavyWeaponsType == 4 || heavyWeaponsType == 5)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.DaggerMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.DaggerMulti);
                    }
                    break;

                case 6:
                case 7:
                case 8:
                case 9:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 22);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 18);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Mace);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Mace);
                    break;

                case 10:
                case 11:
                case 12:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 15);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 25);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spear);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Spear);
                    break;

                case 13:
                case 14:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 25);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 15);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Staff);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Staff);
                    break;

                case 15:
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 20);

                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Sword);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Sword);

                    if (heavyWeaponsType == 20)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.SwordMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.SwordMulti);
                    }
                    break;

                case 21:
                default:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.UA);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.UA);
                    break;
                }
                break;

            case 1:
                // Light Weapons;
                wieldSkillType = Skill.LightWeapons;
                int lightWeaponsType = ThreadSafeRandom.Next(0, 19);
                weaponWeenie = LootTables.LightWeaponsMatrix[lightWeaponsType][eleType];

                switch (lightWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                case 3:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 18);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 22);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Axe);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Axe);
                    break;

                case 4:
                case 5:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.DaggerMulti);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.DaggerMulti);
                    break;

                case 6:
                case 7:
                case 8:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 22);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 18);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Mace);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Mace);
                    break;

                case 9:
                case 10:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 15);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 25);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spear);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Spear);
                    break;

                case 11:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 25);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 15);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Staff);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Staff);
                    break;

                case 12:
                case 13:
                case 14:
                case 15:
                case 16:
                case 17:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 20);

                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Sword);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Sword);

                    if (lightWeaponsType == 14)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.SwordMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.SwordMulti);
                    }
                    break;

                case 18:
                default:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.UA);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.UA);
                    break;
                }
                break;

            case 2:
                // Finesse Weapons;
                wieldSkillType = Skill.FinesseWeapons;
                int finesseWeaponsType = ThreadSafeRandom.Next(0, 22);
                weaponWeenie = LootTables.FinesseWeaponsMatrix[finesseWeaponsType][eleType];

                switch (finesseWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 18);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 22);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Axe);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Axe);
                    break;

                case 3:
                case 4:
                case 5:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Dagger);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Dagger);

                    if (finesseWeaponsType == 3 || finesseWeaponsType == 4)
                    {
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.DaggerMulti);
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.DaggerMulti);
                    }
                    break;

                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 22);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 18);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Mace);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Mace);

                    if (finesseWeaponsType == 9)
                    {
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.Jitte);
                    }
                    break;

                case 11:
                case 12:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 15);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 25);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spear);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Spear);
                    break;

                case 13:
                case 14:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 25);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 15);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Staff);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Staff);
                    break;

                case 15:
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Sword);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Sword);

                    if (finesseWeaponsType == 15)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.SwordMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.SwordMulti);
                    }
                    break;

                case 21:
                default:
                    weaponDefense  = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense  = GetMaxDamageMod(profile.Tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.UA);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.UA);
                    break;
                }
                break;

            default:
                // Two handed
                wieldSkillType = Skill.TwoHandedCombat;
                int twoHandedWeaponsType = ThreadSafeRandom.Next(0, 11);
                weaponWeenie = LootTables.TwoHandedWeaponsMatrix[twoHandedWeaponsType][eleType];

                damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Cleaving);
                damageVariance = GetVariance(wieldSkillType, LootWeaponType.TwoHanded);

                switch (twoHandedWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 20);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 20);
                    break;

                case 3:
                case 4:
                case 5:
                case 6:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 22);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 18);
                    break;

                case 7:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 18);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 22);
                    break;

                case 8:
                case 9:
                case 10:
                default:
                    weaponDefense = GetMaxDamageMod(profile.Tier, 15);
                    weaponOffense = GetMaxDamageMod(profile.Tier, 25);
                    damage        = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spears);
                    break;
                }
                break;
            }

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

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


            // Description
            wo.AppraisalLongDescDecoration = longDescDecoration;
            wo.LongDesc = wo.Name;

            // GemTypes, Material, Workmanship
            wo.GemCount = gemCount;
            wo.GemType  = (MaterialType)gemType;
            int materialType = GetMaterialType(wo, profile.Tier);

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

            // Weapon Stats
            wo.Damage               = damage;
            wo.DamageVariance       = damageVariance;
            wo.WeaponDefense        = weaponDefense;
            wo.WeaponOffense        = weaponOffense;
            wo.WeaponMissileDefense = missileD;
            wo.WeaponMagicDefense   = magicD;

            // Adding Wield Reqs if required
            if (wieldDiff > 0)
            {
                wo.WieldDifficulty   = wieldDiff;
                wo.WieldRequirements = wieldRequirments;
                wo.WieldSkillType    = (int)wieldSkillType;
            }
            else
            {
                // If no wield, remove wield reqs
                wo.WieldDifficulty   = null;
                wo.WieldRequirements = WieldRequirement.Invalid;
                wo.WieldSkillType    = null;
            }

            // Adding Magic Spells
            if (isMagical)
            {
                wo = AssignMagic(wo, profile);
            }
            else
            {
                // If no spells remove magic properites
                wo.ItemManaCost   = null;
                wo.ItemMaxMana    = null;
                wo.ItemCurMana    = null;
                wo.ItemSpellcraft = null;
                wo.ItemDifficulty = null;
            }

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

            wo.Value = value;

            wo = RandomizeColor(wo);
            return(wo);
        }