private void ModifyWeaponDamage(WeaponOverrideData weaponOverride, Item item)
        {
            OLogger.Log("ModifyWeaponDamage(): Updating Weapon Damage");
            WeaponStats weaponStatComponent = item.GetComponent <WeaponStats>();
            float       damageAmount        = weaponOverride.Value;
            DamageType  damageType          = new DamageType(weaponOverride.DmgType, damageAmount);

            weaponStatComponent.BaseDamage.Add(damageType);
            SetAttackStepDamage(weaponStatComponent.Attacks, damageAmount);
        }
        private void CreateDefaultOverrides()
        {
            try
            {
                // Creates an instance of the XmlSerializer class;
                // specifies the type of object to serialize.
                XmlSerializer serializer =
                    new XmlSerializer(typeof(OutwardItemOverrides));
                TextWriter           writer = new StreamWriter(Path.Combine(basePath, "Default.xml"));
                OutwardItemOverrides po     = new OutwardItemOverrides();


                // Creates an ItemOverride.
                ItemOverride i1 = new ItemOverride();
                i1.ItemID = 2000090;

                // Creates an WeaponOverrideData
                WeaponOverrideData o1 = new WeaponOverrideData();
                o1.OverrideType   = OverrideType.WEAPON;
                o1.WeaponStatType = WeaponStatType.DAMAGE;
                o1.DmgType        = DamageType.Types.Fire;
                o1.Value          = 200;

                // Creates an ItemOverrideData
                ItemOverrideData o2 = new ItemOverrideData();
                o2.OverrideType = OverrideType.ITEMSTAT;
                o2.ItemStatType = ItemStatType.MAXDURABILITY;
                o2.Value        = 25.0f;

                // Add them to the list of overrides
                i1.Data = new List <OverrideData>();
                i1.Data.Add(o1);
                i1.Data.Add(o2);

                // Inserts the item into the array.
                po.ItemOverrides = i1;

                // Set DebugMode to default OFF
                po.DebugMode = false;

                // Serializes the WeaponOverrideData, and closes the TextWriter.
                serializer.Serialize(writer, po);
                writer.Close();
            } catch (Exception e)
            {
                throw e;
            }
        }
        private void ParseWeaponChanges(WeaponOverrideData weaponOverride, Item item)
        {
            var weaponStatComponent = item.GetComponent <WeaponStats>();

            switch (weaponOverride.WeaponStatType)
            {
            case WeaponStatType.NONE:
                break;

            case WeaponStatType.DAMAGE:
                OLogger.Log("ParseWeaponChanges(): Updating Damage Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                ModifyWeaponDamage(weaponOverride, item);
                break;

            case WeaponStatType.IMPACT:
                OLogger.Log("ParseWeaponChanges(): Updating Impact Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                weaponStatComponent.Impact = weaponOverride.Value;
                break;

            case WeaponStatType.STAMINA_COST:
                OLogger.Log("ParseWeaponChanges(): Updating Stamina Cost Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                weaponStatComponent.StamCost = weaponOverride.Value;
                break;

            case WeaponStatType.REACH:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Reach Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                weaponStatComponent.Reach = weaponOverride.Value;
                break;

            case WeaponStatType.SPEED:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Attack Speed Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                weaponStatComponent.AttackSpeed = weaponOverride.Value;
                break;

            case WeaponStatType.HEALTH_BONUS:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Health Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var hpBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_maxHealthBonus");
                OLogger.Log("Max HP bonus before " + hpBonus);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_maxHealthBonus");
                hpBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_maxHealthBonus");
                OLogger.Log("Max HP bonus after " + hpBonus);
                break;

            case WeaponStatType.POUCH_BONUS:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Pouch Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var pouchBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_pouchCapacityBonus");
                OLogger.Log("Pouch Bonus before " + pouchBonus);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_pouchCapacityBonus");
                pouchBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_pouchCapacityBonus");
                OLogger.Log("Pouch Bonus after " + pouchBonus);
                break;

            case WeaponStatType.HEAT_PROTECTION:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Heat Protection Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var heatProtection = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_heatProtection");
                OLogger.Log("Heat Protection before " + heatProtection);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_heatProtection");
                heatProtection = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_heatProtection");
                OLogger.Log("Heat Protection after " + heatProtection);
                break;

            case WeaponStatType.COLD_PROTECTION:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Cold Protection Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var coldBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_coldProtection");
                OLogger.Log("Cold Protection Bonus before " + coldBonus);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_coldProtection");
                coldBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_coldProtection");
                OLogger.Log("ParseWeaponChanges(): Cold Protection Bonus after " + coldBonus);
                break;

            case WeaponStatType.IMPACT_PROTECTION:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Impact Resistance Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var impactRes = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_impactResistance");
                OLogger.Log("Impact Resistance Bonus before " + impactRes);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_impactResistance");
                impactRes = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_impactResistance");
                OLogger.Log("Impact Resistance Bonus after " + impactRes);
                break;

            case WeaponStatType.CORRUPTION_PROTECTION:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Corruption Protection Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var corruptionProtection = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_corruptionProtection");
                OLogger.Log("Corruption Protection Bonus before " + corruptionProtection);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_corruptionProtection");
                corruptionProtection = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_corruptionProtection");
                OLogger.Log("Corruption Protection Bonus after " + corruptionProtection);
                break;

            case WeaponStatType.WATER_PROOF:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Water Proofness(?) Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var waterproofBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_waterproof");
                OLogger.Log("Water Proofness(?) Bonus before " + waterproofBonus);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_waterproof");
                waterproofBonus = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_waterproof");
                OLogger.Log("Water Proofness(?) Bonus after " + waterproofBonus);
                break;

            case WeaponStatType.MOVEMENT_PENALTY:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Movement Penalty Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var movementPenalty = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_movementPenalty");
                OLogger.Log("Movement Penalty Bonus before " + movementPenalty);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_movementPenalty");
                movementPenalty = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_movementPenalty");
                OLogger.Log("Movement Penalty Bonus after " + movementPenalty);
                break;

            case WeaponStatType.STAMINA_USE_PENALTY:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Stamina Use Penalty Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var staminaPenalty = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_staminaUsePenalty");
                OLogger.Log("Stamina Use Penalty Bonus before " + staminaPenalty);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_staminaUsePenalty");
                staminaPenalty = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_staminaUsePenalty");
                OLogger.Log("Stamina Use Penalty Bonus after " + staminaPenalty);
                break;

            case WeaponStatType.HEAT_REGEN_PENALTY:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Heat Regen Penalty Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var heatRegenPenalty = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_heatRegenPenalty");
                OLogger.Log("Heat Regen Penalty Bonus before " + heatRegenPenalty);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_heatRegenPenalty");
                heatRegenPenalty = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_heatRegenPenalty");
                OLogger.Log("Heat Regen Penalty Bonus after " + heatRegenPenalty);
                break;

            case WeaponStatType.MANA_USE_MODIFIER:
                OLogger.Log("ParseWeaponChanges(): Updating Weapon Mana Reduction Bonus Stat for Item ID : " + item.ItemID + " to " + weaponOverride.Value);
                var manaReductionModified = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_manaUseModifier");
                OLogger.Log("Mana Reduction Bonus before " + manaReductionModified);
                ReflectionTools.ReflectionSetValue(weaponOverride.Value, typeof(EquipmentStats), weaponStatComponent, "m_manaUseModifier");
                manaReductionModified = ReflectionTools.ReflectionGetValue(typeof(EquipmentStats), weaponStatComponent, "m_manaUseModifier");
                OLogger.Log("Mana Reduction Bonus after " + manaReductionModified);
                break;

            default:
                OLogger.Log("UH OH WEAPON PARSE FAILURE");
                break;
            }

            OLogger.Log("Parsing item id: " + item.ItemID + " , Complete");
            OLogger.Log("------------------------------------");
        }